1. 程式人生 > >IT兄弟連 Java語法教程 Java語言的跨平臺特性

IT兄弟連 Java語法教程 Java語言的跨平臺特性

什麼是平臺

Java是可以跨平臺的程式語言,那麼首先我們需要知道什麼是平臺,通常我們把CPU與作業系統的整體稱為平臺。

CPU大家都知道,是計算機的大腦,它既負責思維運算,又負責計算機中各種零部件的命令控制。CPU的種類非常多,目前我們使用的主流的CPU是由Inter和AMD公司生產的各種CPU。這些CPU使用相同或不同的指令集,指令集就是CPU中用來計算和控制計算機系統的一套指令的集合。指令集又分為精簡指令集和複雜指令集,每種CPU都有其特定的指令集。開發應用程式,首先要知道程式在什麼CPU上執行,也就是要知道CPU所使用的指令集。

作業系統是充當使用者和計算機之間互動的軟體,不同的作業系統支援不同的CPU,嚴格意義上來說是不同的作業系統支援不同的CPU指令集。例如早期的Windows和Linux都支援Inter和AMD的複雜指令集,但並不支援PowerPC所使用的精簡指令集,而早期的MAC電腦(蘋果電腦)使用的都是PowerPC處理器,所以也就無法在MAC下直接安裝Windows,而macOS也無法安裝在Inter和AMD的平臺之上。目前所有主流的作業系統(Windows、Linux、MAC等)都支援Inter與AMD的指令集。

又因為現在主流的作業系統都支援主流的CPU,所以有時也把作業系統稱為平臺。其實想要知道Java到底跨了什麼平臺,只需要在Java的官方網站www.oracle.com上下載Java時提供的平臺版本就可以知道Java到底跨了什麼平臺了。我們會在本書後面的內容中介紹如何下載Java,以及是什麼原因可以通過上面的方式來判斷Java跨平臺的。

 

Java跨平臺原理

從上面的講解中大家瞭解了什麼是平臺,現在為大家介紹一下Java的跨平臺原理,首先我們來看一種與C語言從原始碼到可執行程式過程的相關的圖片(圖2.2)。

bff853bf3d724bed846795cece896af4.png

圖2  C語言從原始碼到可執行程式的過程

 

如果有過C語言開發經驗,圖2看起來將非常輕鬆。我們知道用標準C開發的程式,使用不同的編譯器編譯後的可執行檔案是可以在對應平臺執行的,比如Windows可以使用VC來編譯C原始碼,編譯後的檔案就可以在Windows系統下執行;Linux下可以使用GCC編譯器,生成的可執行檔案就可以在Linux上執行,但是這裡有一個問題就是使用VC編譯的C程式可以在Linux上執行麼?答案肯定是否定的,如果想將Windows平臺下的程式拿到Linux平臺下執行,需要使用Linux平臺下的編譯器再次編譯程式的原始碼生成可執行檔案才能執行。因為C語言編譯後的可執行檔案是無法跨平臺的,使用特定的編譯器編譯C程式只能在對應的平臺上執行,這裡也可以說編譯器是與平臺相關的,編譯後的檔案也是與平臺相關的。我們說的語言跨平臺是編譯後的可執行檔案跨平臺,而不是原始碼程式跨平臺(如果說源程式是跨平臺的,那麼任何一門語言都是跨平臺語言)。

下面我們通過圖2.3來看Java語言是怎麼樣解決可執行檔案跨平臺的。

967c47258d004596bbdbbbd54f03f8d9.png

圖3  Java語言從原始碼到可執行程式的過程

 

通過圖3我們可以發現,在Java原始碼和各個平臺之間多了一個編譯器和一個位元組碼檔案,然後各個平臺通過直譯器來解釋執行這個位元組碼檔案。那麼中間這個編譯器和位元組碼檔案到底是什麼呢?原來,Java語言為了做到跨平臺,通過將Java原始碼經過一個編譯器,編譯成一個與平臺無關的位元組碼檔案,然後各個平臺中相應的直譯器就可以載入、解釋並執行這個位元組碼檔案了(各個平臺的直譯器解釋同一個位元組碼檔案會生成不同的但是執行效果相同的機器指令,Windows和Linux的機器指令就不同,但是運行同一個Java程式的結果是沒有區別),即在一種平臺下編寫的應用程式無需修改也可以在其它平臺上運行了,但是要求該平臺必須擁有對應版本的直譯器才可以。

通常使用Java語言編寫的原始碼檔案以.java為字尾,使用Java提供的編譯工具javac將原始碼編譯後生成的位元組碼檔案以.class為字尾,使用Java提供的執行工具java即可執行