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


相关推荐

  • 10行代码集2000张美女图,Python爬虫120例,再上征途[通俗易懂]

    10行代码集2000张美女图,Python爬虫120例,再上征途[通俗易懂]Python爬虫120例,又来啦

    2022年5月2日
    68
  • Cas认证原理

    Cas认证原理参考文章:https://blog.csdn.net/duanmulanghuan/article/details/81203873介绍:1.cas相当于一个web应用,应配置在一台电脑上,作为cas认证服务器。首先有三个URL:登录URL:cas的登录认证url(假设为:https://cas/login)验证URL:cas的验证ticket(票据)url登出URL:cas的登出u…

    2022年6月28日
    27
  • FileUpload文件上传控件「建议收藏」

    FileUpload文件上传控件「建议收藏」1.FileUpload控件的主要功能是向指定目录上传文件。FileUpload控件不会自动上传控件,而需要设置相关的事件处理程序,然后在程序中实现文件上传。2.FileUpload控件常见的属性

    2022年7月1日
    25
  • PotPlayer+SVP4视频补帧简易教程

    PotPlayer+SVP4视频补帧简易教程这两天突然想到之前看到过视频补帧的测试,印象中效果挺好。昨天试了试,也找过很多找教程,搜集了一些经验,这里先讲解一种特别简单的方法,再说一种不太简单但也很容易上手的方法(这个才是重点!!!)。要用到的软件:Potplayer–依照你系統位数(现在基本都是64位的),不清楚就裝32bitSVP4Free-依照Potplayer安裝版本進行安裝接下来是安装:1.Potpla…

    2022年7月12日
    25
  • 从STN网络到deformable convolution

    从STN网络到deformable convolution1  STN (SpatialTransformerNetwork)1.1    来源论文来源:https://arxiv.org/pdf/1506.02025.pdf    参考博客:    1. https://blog.csdn.net/ly244855983/article/details/80033788(论文解读)    2. https://blog.csdn.net/xbi…

    2022年10月18日
    0
  • TiKV架构解析_ZEN2架构

    TiKV架构解析_ZEN2架构TiKV架构解析参考资料: 1.  TiKV源码解析系列-如何使用Raft  2.  TiKV源码解析系列-multi-raft设计与实现  3.  TiKV源码解析系列-PlacementDriver  4.  TiKV源码浅析-PDScheduler  5.  TiKV源

    2022年9月23日
    0

发表回复

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

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