1 public class HelloWorld { 2 public static void main(String[] args) 3 { 4 String s ; 5 s = 「Hello World!」; //定義字符串s
6 System.out.println(s); 7 } 8 }
① 使用 javac 對 HelloWorld.java 源文件進行編譯爲 HelloWorld.class 字節碼文件。( jdk 開發工具箱中包含 javac 編譯工具和 jre 運行時環境)java
② 類的加載階段,加載至JVM內存中,Main方法就是程序的入口,而後由JVM虛擬機來解釋執行,在一些虛擬機的實現中,還會被JVM利用字節碼解釋器特定系統的機器碼執行,從而提升執行效率。數組
java語言裏負責解釋執行字節碼文件的是java虛擬機,既 JVM(java Virtual Machine)。(JVM是可運行java字節碼文件的虛擬計算機)工具
③ 虛擬機經過類找到HelloWorld的主方法(程序的入口方法),訪問權限爲public(公有可用),虛擬機傳遞String[](字符串數組對象:空數組)類型參數的地址到主方法的args中去,並在棧區爲args開闢內存空間,返回一個void的返回值;開發工具
JVM 將內存區域劃分爲 Method Area(Non-Heap)(方法區) ,Heap(堆) , Program Counter Register(程序計數器) , VM Stack(虛擬機棧,也有翻譯成JAVA 方法棧的),Native Method Stack ( 本地方法棧 ),其中Method Area 和 Heap 是線程共享的 ,VM Stack,Native Method Stack 和Program Counter Register 是非線程共享的。spa
④ 定義一個String(標準類庫中的)類型的變量(在棧區開闢空間)s,s的值不肯定(垃圾值,編譯沒法經過);線程
⑤ s = 「Hello World!」,對象「Hello World!」在方法區的常量數據區開闢空間,屬性即爲:Hello World!,方法即爲:toString(),變量s存放對象「Hello World!」的地址;翻譯
⑥ 虛擬機找到標準類庫中的System.class類並加載到內存中(即方法區的類代碼區中),System.out爲標準字節輸出流對象(),並調用println()方法將變量s的值打印到屏幕上。code
PS: 虛擬機調用主方法時會建立三個默認對象:System.out(標準字節輸出流對象)、System.in(標準字節輸入流對象)和System.error(標準字節出錯流對象).對象
以上共涉及:blog
1個java文件:HelloWorld.java
4個class類: HelloWorld.class、String[].class、String.class、System.class
5個對象: 「Hello World!」、String[]、System.out、System.in、System.error
2個變量:args、s
3個方法:main()、toString()、println()