詳解HelloWorld執行過程
阿新 • • 發佈:2019-01-06
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竟然包含了如此多的祕密!