`

java中HelloWorld的执行流程

    博客分类:
  • java
 
阅读更多

HelloWorld.java是我们学习java的第一个程序,简单的再也不能简单了,可是里面的原理以及执行流程大家都知道吗?最近在复习java知识,特地钻研了一番分享给大家!

贴出HelloWorld的代码如下:

 

public class HelloWorld {
  public static void main(String[] args)
  { 
   String s ;
   s = “Hello World!”; //定义字符串s
   System.out.println(s); 
  }
}

 

 

分析内存图:



 HelloWorld的具体执行过程:

1.执行HelloWorld.java文件,生成HelloWorld.class字节码文件;

2.虚拟机执行HelloWorld.class,将这个类加载到内存中(即方法区的类代码区中);

3. 虚拟机通过类找到HelloWorld的主方法(程序的入口方法),访问权限为public(公有可用),虚拟机传递String[](字符串数组对象:空数组)类型参数的地址到主方法的args中去,并在栈区为args开辟内存空间,返回一个void的返回值;

4.定义一个String(标准类库中的)类型的变量(在栈区开辟空间)s,s的值不确定(垃圾值,编译无法通过);

5. s = “Hello World!”,对象“Hello World!”在方法区的常量数据区开辟空间,属性即为:Hello World!,方法即为:toString(),变量s存放对象“Hello World!”的地址;

6. 虚拟机找到标准类库中的System.class类并加载到内存中(即方法区的类代码区中),System.out为标准字节输出流对象(),并调用println()方法将变量s的值打印到屏幕上。

 

PS: 虚拟机调用主方法时会创建三个默认对象:System.out(标准字节输出流对象)、System.in(标准字节输入流对象)和System.error(标准字节出错流对象).

以上共涉及:

1个java文件:HelloWorld.java

4个class类: HelloWorld.class、String[].class、String.class、System.class

5个对象: “Hello World!”、String[]、System.out、System.in、System.error

2个变量:args、s

3个方法:main()、toString()、println()

 

===========================================================

 

1、为什么一切都是从类开始?

 

Java程序是从类开始构建的, 每个方法和字段都必须在类里面。这是由于Java面向对象的特性: 一切都是对象,它是类的一个实例。面向对象编程语言相比函数式编程语言有许多的优势,比如更好的模块化、可扩展性等等。

 

2、为什么总有一个“main方法”?

 

main方法是程序的入口,并且是静态方法。static关键字意味着这个方法是类的一部分,而不是实例对象的一部分。为什么会这样呢? 为什么我们不用一个非静态的方法作为程序的入口呢?

 

如果一个方法不是静态的,那么对象需要先被创建好以后才能使用这个方法。因为这个方法必须要在一个对象上调用。对于一个入口来说,这是不现实的。因此,程序的入口方法是静态的。

 

参数 “String[] args”表明可以将一个字符串数组传递给程序来帮助程序初始化。

 

3、HelloWorld在JVM中是如何执行的?

 

现在的问题是JVM是怎样加载这个类并调用main方法?

 

在main方法执行之前, JVM需要加载、链接以及初始化这个类。

1. 加载将类/接口的二进制形式装入JVM中。

2. 链接将二进制类型的数据融入到JVM的运行时。链接由3个步骤组成:验证、准备、以及解析(可选)。验证确保类、接口在结构上是正确的;准备涉及到为类、接口分配所需要的内存;解析是解析符号引用。

 

3. 最后,初始化为类变量分配正确的初始值。

 

 


 

加载工作是由Java类加载器来完成的。当JVM启动时,会使用下面三个类加载器:

 

Bootstrap类加载器:加载位于/jre/lib目录下的核心Java类库。它是JVM核心的一部分,并且使用本地代码编写。

扩展类加载器:加载扩展目录中的代码(比如/jar/lib/ext)。

系统类加载器:加载在CLASSPATH上的代码。

所以,HelloWorld类是由系统加载器加载的。当main方法执行时,它会触发加载其它依赖的类,进行链接和初始化。前提是它们已经存在。

 

 

最后,main()帧被压入JVM堆栈,并且程序计数器(PC)也进行了相应的设置。然后,PC指示将println()帧压入JVM堆栈栈顶。当main()方法执行完毕会被弹出堆栈,至此执行过程就结束了。


 

  • 大小: 11 KB
  • 大小: 49.7 KB
分享到:
评论

相关推荐

    第一个Java程序HelloWorld

    Java 中的控制流语句用于控制程序的执行流程,包括 if 语句、switch 语句、while 语句、for 语句等。 方法 Java 中的方法是类的一部分,用于定义一组语句的集合。方法可以具有参数,也可以返回值。 注释 Java 中...

    java初学者所做的笔记 HelloWorld

    Java 基础知识点 本文档为 Java 初学者笔记,涵盖了 Java 语言的基础知识点、发展...* 编译 HelloWorld.java 文件:javac HelloWorld.java * 运行 HelloWorld.class 文件:java HelloWorld * 输出结果:HelloWorld!!!

    ActivitiDemo_LFP_HelloWorld实现

    11. .name("HelloWorld流程") // 流程名称 12. .deploy(); // 部署 13. System.out.println("流程部署ID:"+deployment.getId()); 14. System.out.println("流程部署Name:"+deployment.getName()); 15. }</span> ...

    java基础语法入门笔记.pdf

    1. 编写程序:创建一个名为HelloWorld.java的文本文件,并在其中输入代码。 2. 编译程序:使用javac命令将.java源文件编译成.class字节码文件。 3. 运行程序:使用java命令执行对应的类名(不带.java后缀)。 `...

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA编程习题与答案_完全版.doc

    * 控制结构:Java 中的控制结构包括 if 语句、switch 语句、循环语句等,用于控制程序的执行流程。 * System.out.println():这是 Java 的一个输出方法,用于将字符串或变量的值输出到屏幕上。 2. 显示网格 显示...

    2021Java零基础自学笔记资源(九)

    包括下载和安装JDK、编写HelloWorld.java程序、编译和运行Java程序等步骤。 八、Java语言中的注释 Java语言中的注释可以分为单行注释和多行注释。单行注释以//符号开头,用于注释单行代码。多行注释以/*符号开头,...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 if语句的嵌套 71 4.2.3 if-else语句 73 4.2.4 if-else语句嵌套 75 4.3 ...

    Java基础知识,适用于0基础Java学习者

    例如,String str = "hello" + "world"; 三目运算符 Java中的三目运算符用于判断布尔类型的表达式或值,执行不同的代码块。例如,boolean b = true; int x = b ? 1 : 2; 流程语句 Java中的流程语句包括if语句、...

    java源码包2

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 if语句的嵌套 71 4.2.3 if-else语句 73 4.2.4 if-else语句嵌套 75 4.3 ...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包4

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包3

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    计算机核心java编程笔记

    Java 语言中的动作可以用于控制程序的执行流程,例如: * package * import * throw * throws * extends * implements * this * super * instanceof * new 七、Java 保留字 Java 语言中的保留字是具有特殊含义的...

    java基础教程第3版习题解答.doc

    * Java 中的字符串可以使用双引号或单引号括起来,例如 "Hello, World!" 或 'Hello, World!'. 方法和类 * Java 中的方法可以是静态方法或实例方法,静态方法可以使用类名直接调用,实例方法需要通过对象实例调用。...

    JavaSE - 01.计算机基础及Java简介.pdf

    编写第一个Java程序,如`HelloWorld`,展示了Java程序的基本结构。`public class`定义公共类,`main`方法是程序的入口点。Java程序的执行流程包括编译(`javac`)源代码生成字节码(`.class`文件),然后由JVM执行。...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...

    Java OOP.mmap

    4. Java代码的编写执行过程 5. 注释 6. 关键字、标识符 7. Java中的数据类型 8. Java中的常量 二、变量和运算符 1. 变量和计算机存储单元 2. 数据类型和常量 3. 数据类型转换 4. 运算符 和 优先级 三、...

Global site tag (gtag.js) - Google Analytics