1. 程式人生 > >為什麽說Java語言是平臺無關的?

為什麽說Java語言是平臺無關的?

所有 -h 編譯器 c++程序 href 程序 name rep memory

適當的整理了一下:

一、平臺與機器指令

無論哪種編程語言編寫的應用程序都需要經過操作系統處理器來完成程序的運行,因此這裏的平臺是又OS和CPU所構成的,所謂的平臺無關就是指軟件的運行不會因操作系統、處理器的變化而無法運行或出現運行錯誤。
每個平臺都有自己獨特的機器指令,所謂平臺的機器指令就是可以被該平臺直接識別、執行的一種由0和1組成的序列代碼。相同的CPU和不同的OS所形成的平臺的機器指令可能是不同的

二、何為與平臺相關?

C/C++程序是依賴平臺的:C/C++源程序所在的特定平臺對其源文件進行編譯、鏈接,生成機器指令,即根據當前平臺的機器指令生成可執行文件

,所以其可以在任何與當前平臺相同的平臺上運行這個可執行文件。但是,不能保證C/C++源程序所產生的可執行文件在所有平臺上都能正確的運行,其原因是不同平臺可能具有不同的機器指令。所以,一旦更換了平臺,就可能需要修改源程序,並針對新的平臺重新編譯源程序,也就是與平臺相關
C/C++程序無法跨平臺的根本原因是C/C++源程序的編譯器針對平臺進行編譯,而不同的平臺有不同的機器指令,所以無法跨平臺。

三、Java為何可以跨平臺

C/C++之所以不能跨平臺,就是因為C/C++源程序是對平臺編譯的,所以與平臺密切相關。如果有這樣的一個環境:它既可以向下兼容(對平臺兼容),又可以向上兼容(程序可以運行),那麽不就可以跨平臺了嗎。基於這樣的原理,Java在計算機的操作系統上又提供了一個Java運行環境——JRE(安裝JDK)。
JRE由Java虛擬機,類庫和一些核心文件組成,也就是說,只要平臺提供了Java運行環境,Java編寫的軟件就可以在其上運行。
和C/C++不同的是,Java語言提供的編譯器不針對特定的操作系統和CPU芯片進行編程,而是針對Java虛擬機把Java源程序編譯成稱為字節碼的“中間代碼”,然後Java虛擬機負責將字節碼翻譯成虛擬機所在平臺的機器碼

,並讓當前平臺運行該機器碼。
Java語言的運行原理:
在一個計算機上編譯得到的字節碼文件(就是.class文件,字節碼文件是經過編譯器預處理過的一種文件,是JAVA的執行文件存在形式,它本身是二進制文件,但是不可以被系統直接執行,而是需要虛擬機解釋執行。),可以復制到任何一個安裝了Java運行環境的計算機上直接運行。字節碼文件由虛擬機負責解釋執行,即Java虛擬機將字節碼翻譯成本地計算機的機器碼,然後將機器碼交給本地的操作系統運行。

由於在一個計算機上編譯得到的字節碼文件可以復制到任何一個安裝了Java運行環境的計算機上直接使用,所以字節碼其實是一種“中間代碼”,這也就是為什麽“Java語言能夠一次編譯,處處運行,也就是Java跨平臺的原因。”所以稱Java是一種“半編譯,半解釋的語言”,即源程序——>編譯——>字節碼——>字節碼解釋程序——>對應平臺的機器語言。”

http://blog.csdn.net/newmemory/article/details/54949817

為什麽說Java語言是平臺無關的?