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