public class HelloWorld {
public static void main(String[] args) {
String s;
s = "HelloWorld";
System.out.println(s);
}
}
复制代码
运行过程
那么 Java 是如何执行这段代码的呢?
1.调用 Java 的编译命令
javac HelloWorld.java
- Java 编译器首先找到源文件中的
public class,再找根据public class找到源文件中的其他类,Java 编译器会根据每一个类生成一个字节码文件( JVM 可以读懂的文件类型)
2.通过 Java 命令执行刚才生成的 .class 文件
java HelloWorld
- 系统找到文件中唯一的主类
public class。 - 据
public static关键字找到跟主类关联可执行的main方法。 String [] args:系统会传递一个空的字符串数组给主方法。系统加载String [].class字节码文件到方法区,系统会为args变量在主线程的栈帧中开辟一块空间(存放String []数据的地址)指向堆中存放的数据。String s:系统加载String.class字节码文件到方法区,在主线程栈帧中为s变量开辟一块空间(存放数据的地址),此时s的值还没有确定(垃圾值,编译无法通过)。s="HelloWorld":字符串"HelloWorld"被存放到方法区的常量区中,并让s指向该地址。System.out.println(s):系统加载System.class字节码文件到方法区,并且系统会默认在堆区创建System.out、System.in、System.err三个对象。- 字符串在被输出时会自动调用
toString()方法。
内存图:
3.得到输出结果
HelloWorld
相关概念
- 1 个源文件:HelloWorld.java
- 4 个字节码文件:HelloWorld.class、String[].class、String.class、System.class
- 5 个对象:"HelloWorld"、String[]、System.out、System.in、System.err
- 2 个变量:args、s
- 3 个方法:main()、System.out.println()、toStting()
本文介绍了 Java 代码的运行过程,先调用 Java 编译命令,编译器根据源文件生成字节码文件,再通过 Java 命令执行生成的文件,系统加载字节码文件到方法区等。还提及了内存图、相关概念,如源文件、字节码文件、对象、变量和方法等。
1542

被折叠的 条评论
为什么被折叠?



