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()