`

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 | hello world文本编译代码

    在创建`helloworld文本编译代码`中的文件时,你需要创建一个名为`HelloWorld.java`的文件。这个文件将包含我们的Java代码。 2. **编写Java代码**: 在`HelloWorld.java`文件中,你将看到以下内容: ```java ...

    Java入门HELLOWORLD

    在这个教程中,我们将深入探讨Java的基本概念和 HelloWorld 示例,帮助初学者建立起对Java编程的基础理解。 首先,让我们了解Java的起源。Java是由Sun Microsystems(后被Oracle收购)的詹姆斯·高斯林(James ...

    实现java_HelloWorld小程序.pdf

    - 在命令提示符中输入 `java HelloWorld` 并回车,执行程序。 - 如果一切正常,屏幕上会输出 “Hello World!”。 #### 五、总结 通过以上步骤,我们成功实现了 Java HelloWorld 小程序。这个简单的示例程序不仅...

    hello world hello world

    标题中的“hello world hello world”和描述中的“hello world”似乎是在引用计算机编程中的经典入门程序,通常用于演示一个语言的基本输出功能。在大多数编程语言中,“Hello, World!”是初学者编写的第一个程序,...

    java helloworld程序

    Java HelloWorld程序是初学者接触Java编程的第一步,它是一个简单的示例程序,用于演示如何在Java环境中编写并运行代码。这个程序通常包含一个类(class)和一个主方法(main method),通过打印“Hello, World!”到...

    理解java的helloworld.doc

    Java 的 HelloWorld 示例是每个初学者入门编程的第一步,它展示了如何在 Java 语言中编写一个简单的程序并执行。本文将深入解析 HelloWorld 示例背后的原理和常见问题,帮助读者更好地理解和掌握 Java 开发的基础。 ...

    JNI入门之HelloWorld(一)

    这一步会根据`HelloWorld.java`中的`native`方法自动生成对应的JNI头文件。 ##### 4. 处理JNI头文件 将生成的`com_helloworld_HelloWorld.h`文件移动到`HelloWorld.java`所在的目录: ```bash mv ...

    实现java_HelloWorld小程序.docx

    打开命令行终端,导航到包含`HelloWorld.java`文件的目录,然后输入`javac HelloWorld.java`。如果编译成功,你会看到没有输出,说明没有错误。 2. **运行**:编译成功后,你可以通过`java`命令运行程序。在同一个...

    Java Helloworld 程序.rar

    虽然`HelloWorld`程序简单到没有创建对象,但在实际的Java编程中,你会经常定义类并创建它们的实例。 8. **面向对象编程**:Java是一种典型的面向对象编程语言,支持封装、继承和多态三大特性。在这个例子中,`...

    spring-mvc-helloworld

    在 `spring-mvc-helloworld` 项目中,可能会包含一个 `web.xml` 文件来配置 DispatcherServlet。此外,还需要 Spring MVC 的配置文件(如 `servlet-context.xml`),其中定义了 Controller、视图解析器和其他组件的...

    HelloWorld

    在Java中,"HelloWorld"程序会稍微复杂一些,因为Java是一种静态类型的编程语言,需要定义类和主方法: ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello,...

    HelloWorld.java

    ### HelloWorld.java程序解析 #### 一、程序简介 在计算机编程领域,“Hello World”程序几乎是一种传统,它作为初学者接触新编程语言的第一个实践项目,不仅简单易懂,还能帮助理解该语言的基本语法结构。本篇...

    JBPM_DEMO例子 Hello World

    接着,"helloworld.png"可能是流程图的可视化表示,它用图形化的方式展现了流程的结构。在JBPM中,可以使用这样的图形来直观地查看和理解流程定义。每个形状代表一个活动,如任务、事件或决策,线条则表示活动之间的...

    Axis开发WebService Helloworld实例

    1. 在Eclipse中,创建一个新的Web Project,并将`HelloWorld.java`和生成的Stub/Skeleton类放入源代码目录。 2. 编写一个简单的Servlet,如`HelloWorldServlet.java`,用于启动Web Service: ```java import javax...

    struts2 helloworld

    "Struts2 HelloWorld"是学习Struts2框架的基础教程,通过这个例子,我们可以了解Struts2的基本配置和工作流程。 首先,让我们从项目结构开始。在"struts2_helloWorld"压缩包中,通常会包含以下几个关键文件: 1. *...

    实现HELLOWORLD入门和常见错误分析

    HelloWorld.java`命令将在当前目录下创建包目录和类文件。若不指定`-d`,`.class`文件将直接生成在当前目录下。运行时,应确保类文件所在目录已添加到`CLASSPATH`或使用完整的类路径调用。 #### 增强理解:与C/C++...

    java-helloworld

    在`java-helloworld-master`这个压缩包中,很可能包含了上述的`HelloWorld.java`源文件,以及可能的编译和运行脚本,用于指导用户了解Java开发的基本流程。对于初学者来说,这是一个很好的起点,通过这个简单的项目...

    hello world.zip

    public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` C++的实现可能如下: ```cpp #include int main() { std::cout << "Hello, World!"; ...

Global site tag (gtag.js) - Google Analytics