java中main方法是怎么运行的?
来源:互联网 发布:淘宝直播网址 编辑:程序博客网 时间:2024/06/05 16:08
学过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() 方法执行完毕,整个的栈会被销毁,整个的应用也就正常结束了。
阅读全文
0 0
- java中main方法是怎么运行的?
- 在maven中运行java main函数的方法
- 在android中运行java main方法
- 在android中运行java main方法
- 在android中运行java main方法
- 在android中运行java main方法
- web项目没有main方法,怎么运行的?
- AndroidStudio运行java的main方法
- maven使用exec插件运行Java main方法,以下是3种不同的操作方式。
- 【Maven】在Maven中运行java main函数的方法(3 ways to run Java main from Maven)
- java中main()方法是哪个类里面的方法?
- (48)Java中没有main方法也能运行输出的一种特例
- Java写了main()方法运行时在类 class 中找不到 main 方法
- java中main方法启动的是一个进程还是一个线程
- 在java中为什么main方法必须是静态的解释
- java中main方法
- java中main方法的个数
- java中main方法的详解
- 使用Kettle遇到的一些问题
- javascript中的原型(链)和继承
- mongodb 随笔
- 【SpringCloud】(三):客户端发现方式 Eureka
- ListableBeanFactory
- java中main方法是怎么运行的?
- netty客户端引发的线程血案(二)
- eclipse远程调试BUG
- 通过postman向OpenTSDB插入数据并查询
- 训练总结 8.8
- 斜率优化
- Ubuntu安装Git
- hdu 6092 Rikka with Subset
- C++出现to_string is not a member of std 或者 to_string was not declared in this scope的解决方法