java中main方法是怎么运行的?

java中main方法是怎么运行的?学过java的都知道main方法是学习java的开始,也是程序的入口,不过你有多少个类或程序,线程,他们的入口方法都是main()main方法是一个静态的方法,所以这个方法是属于类的,而不是对象的;在main()方法中,参数类型是“String[]args”,意味着在启动Java应用的同时,传递一个String类型的数组来定制化应用的初始化属性。执行过程:现在

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

学过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的HelloWorld程序

实际上,装载的工作是由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/138575.html原文链接:https://javaforall.net

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


相关推荐

  • 致CSDN读者的一些话:感恩这十年的陪伴,不负遇见,短暂消失

    致CSDN读者的一些话:感恩这十年的陪伴,不负遇见,短暂消失有人说,世间一切,都是遇见,都是机缘。是啊,因为CSDN,我与很多人成为了好朋友,虽未谋面,但这种默默鼓励、相互分享的感觉真好;因为CSDN,我人生进度条八分之一(十年)的许多故事在这里书写,笔耕不辍,也算不得辜负时光吧;因为CSDN,我更珍惜每一位博友、每一位朋友、每一位老师,解答大家的问题,鼓励考研或找工作失败的人继续战斗;因为CSDN,我认识了女神,并分享了许多我们一家的故事。感恩遇见,不负青春。

    2022年5月30日
  • Activity中setContentView浅析

    Activity中setContentView浅析protectedvoidonCreate(finalBundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}setContentView()方法会将我们的视图设置到哪儿去了?publicvoidsetCo…

    2022年6月26日
  • 重庆python编程培训班[通俗易懂]

    重庆python编程培训班[通俗易懂]浙江:八年级将新增Python课程内容重磅消息!浙江今年9月份开始的新学期,三到九年级信息技术课将同步替换新器材!其中,八年级将新增Python课程内容。新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材规划五六年级开始接触。互联网大省——浙江领跑全国编程教育!今年9月新学期,三-九年级信息技术课将同步替换新器材。最新的教材目录显示,从小学三年级一直到九年级,内容都有不同程度的调整。三年级新增了“信息社会”和“网络生活”,四上新增了“走进多媒体”、“

    2022年5月16日
  • java中经常使用的日期格式化(全)「建议收藏」

    java中经常使用的日期格式化(全)

    2022年2月2日
  • AEJoy —— 介绍神奇的 10 个 AE 表达式附带 2 种简单的调试方法

    对于那些不熟悉AE的人来讲很快那么AE表达式是什么呢?AE表达式是一个基于Javascript编程语言的代码,您可以通过按Alt+左键点击小码表来插入到AE中。如图所示AE表达式非常强大,可以非常方便地制作酷炫的运动图形特效。它令人惊奇的地方是,仅仅需要少许的编程代码,它可以就可以帮助您的动画生动地运动起来。AE表达式可以显著改善您的工作流程,当您创建一个拥有复杂代码的动画时,甚至可以真切地实现惊人的动态图形特效。弹性表达式弹性表达式…

    2022年4月6日
  • 深度学习-目标检测评估指标P-R曲线、AP、mAP[通俗易懂]

    深度学习-目标检测评估指标P-R曲线、AP、mAP[通俗易懂]mAP评估

    2022年6月29日

发表回复

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

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