1. 程式人生 > >詳解HelloWorld執行過程

詳解HelloWorld執行過程

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竟然包含了如此多的祕密!