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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux中iostat命令_ios命令行怎么打开

    linux中iostat命令_ios命令行怎么打开简介iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。 语法iostat[-c][-d][-h][-N][-k|-m][-t][-V][-x][-

    2022年10月5日
    3
  • WCF基金会

    WCF基金会

    2022年1月13日
    53
  • 自锁电子开关电路_继电器自锁

    自锁电子开关电路_继电器自锁电路原理分析:电路上电后,由于IRF5305(P型MOSFET)栅极经R1上拉,处于高电位,IRF5305处于截止状态,当按下轻触开关S1,5V电源经R1,R2,R3,C1与R5分压得到一个能使Q2导通的电压,Q2一导通,Q2集电极电压拉低,IRF5305栅极电压也变低,IRF5305导通,电压经R4,R5分压…

    2026年1月31日
    4
  • lm算法讲解_m算法

    lm算法讲解_m算法请问MATLAB中LM算法(Levenberg-Marquard-algorithm)的函数是什么?。http://www.mathworks.com/matlabcentral/fileexchange/16063-lmfsolve-m-levenberg-.%.去看吧好像没有二维的.你最好看看这个函数,根据LM算法的意义修改一下计算方法:用来产生一些数据片段(例如消息或会话项)的哈…

    2022年10月1日
    4
  • xshell连接虚拟机使用的是什么连接模式_虚拟机安装ssh服务

    xshell连接虚拟机使用的是什么连接模式_虚拟机安装ssh服务XShell使用前提:1.对应的需要连接的虚拟机在vm中开机着2.下载并安装好XShell3.虚拟机网络连通(具体可看(5条消息)Hadoop(1)——Hadoop集群构建(4)——Linux系统网络配置_连胜是我偶像的博客-CSDN博客使用教程:1.点击新建,输入名称(该名称为xshell中使用的名称),输入主机(对应虚拟机的ip地址)2.右键新建的会话,点击打开3.输入账号密码进行登录4.成功标志…

    2025年11月19日
    7
  • Java设计模式之适配器模式和外观模式

    Java设计模式之适配器模式和外观模式

    2021年8月22日
    71

发表回复

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

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