java中main方法的运行

java中main方法的运行转载自:https://blog.csdn.net/WGYH_3767/article/details/76933676(最近要把一个main方法启动的项目集入web项目里,参考了main方法的运行机制才解决。)学过java的都知道main方法是学习java的开始,也是程序的入口,不过你有多少个类或程序,线程,他们的入口方法都是main()。main方法是一个静态的…

大家好,又见面了,我是你们的朋友全栈君。

转载自:https://blog.csdn.net/WGYH_3767/article/details/76933676

      (最近要把一个main方法启动的项目集入web项目里,参考了main方法的运行机制才解决。)

      学过java的都知道main方法是学习java的开始,也是程序的入口,不过你有多少个类或程序,线程,他们的入口方法都是main()。main方法是一个静态的方法,所以这个方法是属于类的,而不是对象的;在 main() 方法中,参数类型是 “String[] args”, 意味着在启动Java应用的同时,传递一个 String 类型的数组来定制化应用的初始化属性。
执行过程:
现在的问题是:JVM是如何加载类,又是如何调用 main() 方法的?我们简单地总结一下整个流程:
1. load(装载):把编译生成的 .class 文件读入到JVM中,存放在内存中。
2. link(链接):合并读入内存的 .class 文件,解析文件之间的引用关系。该过程进一步分成:verification(验证),preparation(预处        理),可选的resolution(解析)。验证确保读入的 .class 文件是符合规范标准。预处理主要的作用是分配存储所需的内存空间。解      析是负责解析 .class 文件之中的符号引用。
3. initialize the class(初始化类):把类(class)的变量初始化到一个合适的状态。
4. executed the main method(执行main方法)

       实际上,装载的工作是由Java的 类加载器 完成的。当JVM启动的时候,会同时启动三个类加载器。
1. Bootstrap class loader(根加载器):负责加载位于 “/jre/lib” 目录下的核心Java类库。该根加载器是JVM核心的一部分,而且是使用本地语言(C/C++)实现的。
2. Extensions class loader(扩展加载器):负责加载位于 “/jar/lib/ext” 等目录下的扩展Java类库。
3. System class loader(系统加载器):负责加载位于 CLASSPATH 路径中的Java类。

      所以,我们的 HelloWorld 类是被系统加载器加载的。在该类的 main() 方法被执行之前,它会首先完成 装载、链接、初始化其他被依赖类等工作。

     最后,包含 main() 方法的栈帧会被推入到JVM的 “mian” 线程所在的栈中,同时,程序计数器也已经被设置妥当。随后,被调用的 println() 方法又会生成一个栈帧被推入到 “main” 线程所在的栈中。当 main() 方法执行完毕,整个的栈会被销毁,整个的应用也就正常结束了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143794.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JS、ActiveXObject、Scripting.FileSystemObject

    JS、ActiveXObject、Scripting.FileSystemObjectJavascript之文件操作(IE)一、功能实现核心:FileSystemObject对象要在javascript中实现文件操作功能,主要就是依靠FileSystemobject对象。&#1

    2022年7月1日
    27
  • Elasticsearch数据库下载

    Elasticsearch数据库下载地址:https://www.elastic.co/downloads/past-releases转载于:https://www.cnblogs.com/xueershewang/p/9792788.html

    2022年4月30日
    56
  • MT4安卓版官网下载[通俗易懂]

    MT4安卓版官网下载[通俗易懂]目前,mt4因为特有的优势,吸引了许多投资者使用。MT4是目前最受欢迎的外汇交易平台。如果你的手机是安卓手机,要使用mt4交易,首先就得下载一个安卓版的软件。那么安卓如何下载呢。

    2022年8月15日
    7
  • BigDecimal 加减乘除[通俗易懂]

    在java里面,int的最大值是:2147483647,现在如果想用比这个数大怎么办?换句话说,就是数值较大,这时候就用到了BigDecimal 下载整理了一下BigDecimal的加减乘除。。 BigDecimalbignum1=newBigDecimal(“10”); BigDecimalbignum2=newBigDecimal(

    2022年4月14日
    76
  • intellij idea 激活码2021-04-20(破解版激活)

    intellij idea 激活码2021-04-20(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    64
  • 用Python做一个“以图搜番“的应用程序,再也不用愁动漫图片的出处了!

    用Python做一个“以图搜番“的应用程序,再也不用愁动漫图片的出处了!文章目录前言PyQt5界面设计使用QtDesigner绘制界面视频部件插入小技巧解码器下载功能实现trace.moeAPI介绍与视频使用Nuitka打包成exe文件前言喜欢看动漫的朋友们大概都能体会到一个难受的事情,就是在论坛或者群聊里面看到一张动漫截图,很想知道它的出处,但百度搜了一圈却也没有一个可靠结果,就很郁闷。今天就来带大家用Python做一个简单的“以图搜番”小应用。应用本身的实现不是很难的事情,其实就是调用别人的API接口来实现,主要目的还是通过这个案例来学习以下内容:学习如何用Py

    2022年10月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号