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()
小小的HelloWorld竟然包含了如此多的秘密!