1.4 Java跨平臺原理
由原始檔(.java)--->位元組碼檔案(.class)(二進位制檔案)-----> 解釋---->Unix,Win,Linux等機器。
-
一次編譯,到處執行
-
編譯器的作用:將原始檔編譯成class檔案
-
虛擬機器的作用:將位元組碼檔案解釋成對應平臺機器碼並執行。
-
java可以實現跨所有的平臺?只有提供並且安裝了相對應的虛擬機器就可以跨該平臺。
-
虛擬機器和直譯器的關係:直譯器是虛擬機器的一個重要的組成部分。
-
Java語言的執行要經過編譯和解釋兩個階段。
Java 實現跨平臺的主要原因在於它的編譯和執行方式。Java 程式首先被編譯成中間程式碼(bytecode),然後在不同平臺上使用 Java 虛擬機器(JVM)來執行這些中間程式碼。
由於中間程式碼是與特定平臺無關的,因此可以在任何支援 Java 的平臺上執行。JVM 負責將中間程式碼轉換為特定平臺的機器碼,這樣就可以在不同的作業系統和硬體上執行相同的 Java 程式。
另外,Java 提供了豐富的標準庫和 API,這些庫和 API 是與平臺無關的,可以在任何支援 Java 的平臺上使用,從而使開發者能夠編寫一次程式碼,然後在多個平臺上執行。
因此,Java 的跨平臺能力是透過中間程式碼和虛擬機器的方式實現的,這使得 Java 成為一種非常適合跨平臺開發的程式語言。
Java之所以可以跨平臺,是因為它採用了一種叫做“Java虛擬機器(JVM)”的技術。讓我們用通俗易懂的語言來解釋這一原理。
什麼是跨平臺?
跨平臺的意思是同一段程式程式碼可以在不同的作業系統(如Windows、Mac、Linux等)上執行,而不需要修改程式碼。
Java跨平臺的原理
-
編寫原始碼:
- 你編寫的Java程式碼儲存在
.java
檔案中。
- 你編寫的Java程式碼儲存在
-
編譯成位元組碼:
- 使用
javac
命令將.java
檔案編譯成位元組碼(.class
檔案)。這個位元組碼是中間語言,不同於機器語言,但比原始碼更接近計算機能理解的語言。
- 使用
-
Java虛擬機器(JVM):
- 每個作業系統都有自己特定版本的JVM。例如,Windows有Windows版的JVM,Linux有Linux版的JVM。
- 當你執行Java程式時,JVM會讀取和解釋位元組碼,並將其轉換為機器可以理解的指令。
- 由於JVM是針對不同作業系統的,所以同一個位元組碼檔案可以在不同的作業系統上執行,而無需修改。
圖解
[編寫程式碼]
↓
HelloWorld.java
↓
[編譯]
↓
HelloWorld.class (位元組碼)
↓
[執行]
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Windows JVM │ │ Linux JVM │ │ Mac JVM │
└─────────────┘ └─────────────┘ └─────────────┘
↓ ↓ ↓
執行HelloWorld 執行HelloWorld 執行HelloWorld
關鍵點
-
一次編寫,到處執行:
- Java的口號是“Write Once, Run Anywhere”。你只需要編寫一次程式碼,就可以在任何安裝了對應JVM的作業系統上執行。
-
JVM的角色:
- JVM充當了一個“翻譯器”的角色,將通用的位元組碼翻譯成特定作業系統可以理解的機器程式碼。
優勢
-
開發效率高:
- 開發者不需要為每種作業系統編寫不同的版本,只需要編寫一次程式碼並編譯成位元組碼。
-
相容性強:
- 只要有對應的JVM,Java程式幾乎可以在任何裝置上執行,從伺服器到桌面計算機,再到移動裝置。
例子
假設你編寫了一個簡單的Java程式HelloWorld.java
:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
- 你用
javac HelloWorld.java
編譯,生成HelloWorld.class
。 - 然後,你可以在Windows上執行它:
java HelloWorld
,它會列印“Hello, World!”。 - 接著,你可以把同一個
HelloWorld.class
檔案放到Linux或Mac上,只要有對應的JVM,同樣可以用java HelloWorld
來執行,並得到相同的輸出。
總結
Java跨平臺的關鍵在於JVM,它負責將通用的位元組碼轉換為具體作業系統的機器指令。這種設計使得Java程式可以在不同平臺上無縫執行,極大地提高了開發和部署的靈活性。