一、完成一個Java程序的流程:編輯Java源代碼→編譯Java程序→運行Java程序
1. 在記事本中編寫Java程序,然后保存為.java類型文件(Java源文件)
2. 使用javac命令將源文件編譯成字節碼文件(*.class文件)
3. 使用java命令解釋執行字節碼文件
【示例】
1. 在路徑D:\下創建一個HelloWorld.java文件,並編寫如下代碼
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
2. 在命令行窗口先切換到路徑D:\,然后輸入“javac [-d .] HelloWorld.java”命令
補:javac命令的用法為“javac -d destdir srcFile”,其中“-d destdir”指定編譯生成的字節碼文件的存放路徑,而srcFile則是Java源文件所在的位置。
3. 在命令行窗口進入HelloWorld.class所在的位置,然后輸入“java HelloWorld”命令
補:java命令的用法為“java Java類名”,java命令后的參數是Java類名,而不是字節碼文件的文件名,也不是Java源文件名。
二、Java程序的運行原理
Java源程序經過編譯並不會生成特定平台的機器碼,而是生成一種與平台無關的字節碼(即*.class文件)。這種字節碼不是可執行的,必須使用Java解釋器來解釋執行。
Java語言里負責解釋執行字節碼文件的是Java虛擬機(即JVM),JVM是可運行Java字節碼文件的虛擬計算機。
補1:當使用Java編譯器編譯Java程序時,生成的是與平台無關的字節碼,這些字節碼不面向任何具體平台,只面向JVM。不同平台上的JVM都是不同的,但它們都提供了相同的接口。所有平台上的JVM向編譯器提供相同的編程接口,而編譯器只需要面向虛擬機,生成虛擬機能理解的代碼,然后由虛擬機來解釋執行。在一些虛擬機的實現中,還會將虛擬機的代碼轉換成特定系統的機器碼執行,從而提高執行效率。
補2:JVM是Java程序跨平台的關鍵部分,只要為不同平台實現了相應的虛擬機,編譯后的Java字節碼就可以在該平台上運行。顯然,相同的字節碼需要在不同的平台上運行,這幾乎是“不可能”的,只有通過中間的轉換器才可以實現,JVM就是這個轉換器。可以認為JVM分為向上和向下兩個部分,所有平台上的JVM向上提供給Java字節碼程序的接口完全相同,但向下適用不同平台的接口則互不相同。
補3:JVM是一個抽象的計算機,和實際的計算機一樣,它具有指令集並使用不同的存儲區域。它負責執行指令,還要管理數據、內存和寄存器。