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)
上一篇 2022年5月20日 下午8:20
下一篇 2022年5月20日 下午8:20


相关推荐

  • fvwm 配置文件_idea安装与配置详解

    fvwm 配置文件_idea安装与配置详解FVWM新手入门不完全手册作者:asvaboy++(linuxosboy@sina.com)Fvwm是什么?哪里可以下载?Fvwm是一种窗口管理器,它可以方便的管理系统的资源。gnome和kde是桌面系统,这是两个不同的概念。桌面系统可以调用不同的窗口管理器,这就是为什么gnome系统可以有metacity和swafish两种不同的WM可以选择。现在WM很多,但是Fvwm作为一种历

    2022年10月3日
    7
  • display属性详解

    display属性详解根据 CSS 规范的规定 每一个网页元素都有一个 display 属性 用于确定该元素的类型 每一个元素都有默认的 display 属性值 比如 div 元素 它的默认 display 属性值为 block 称为块元素 而 span 元素的默认 display 属性值为 inline 称为 行内 元素 块元素与行元素是可以转换的 也就是说 display 的属性值可以由我们来改变 display 常用属性值 1 none 隐藏对象 2 inline 指定对象为行内元素 3 block 指定对象为块元素 4 inline bl

    2026年3月20日
    2
  • Transformer模型详解

    Transformer模型详解转载请注明出处,原文地址简介AttentionIsAllYouNeed是一篇Google提出的将Attention思想发挥到极致的论文。这篇论文中提出一个全新的模型,叫Transformer,抛弃了以往深度学习任务里面使用到的CNN和RNN,目前大热的Bert就是基于Transformer构建的,这个模型广泛应用于NLP领域,例如机器翻译,问答系统,文本摘要和语音识别等等方向…

    2022年5月15日
    37
  • 智能网关是路由器吗_一般路由器网关是多少

    智能网关是路由器吗_一般路由器网关是多少配制成路由网关filters作用是让页面请求地址变成自己设置的地址现在页面出现了400错误因为之前的renrne-fast里面自己配置了跨域等于配置了二个跨域所以我们配置跨域的时候要把他的注释掉addallowOriginPattern这个注解…

    2022年7月28日
    9
  • 线段树+扫描线(有关扫描线的理解)

    线段树+扫描线(有关扫描线的理解)扫描线 下面是来自 soar 转载的一篇博客 这篇博客解决了我对算区间长度时的不理解 实际上这个线段树的叶子节点保存的是这个点 x 坐标到下一个 x 坐标 排序后的 的区间长度 题意 二维平面有 n 个平行于坐标轴的矩形 现在要求出这些矩形的总面积 重叠部分只能算一次 分析 线段树的典型扫描线用法 nbsp nbsp nbsp nbsp nbsp nbsp 首先假设有下图两个矩阵 我们如果用扫描线的方法如何计算它们的总面积呢

    2026年3月26日
    2
  • sudo chmod 755 ….指令分析

    sudo chmod 755 ….指令分析sudo:使用管理员root权限执行指令。chmod:文件调用权限分为三级:文件拥有者、群组、其他。利用chmod可以改变文件权限。775:7,7,5各代表一个权限其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。-rwx-r–r–(一共10个参数)表示文件所属组和用户的对应权限。第一个跟参数属于管理员,跟chmod无关,先不管.2-4…

    2022年7月16日
    21

发表回复

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

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