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

  • 2019 年 10 月 5 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/ITXDL123/article/details/92577802

什麼是平台

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)。

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

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

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

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

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

通常使用Java語言編寫的源程式碼文件以.java為後綴,使用Java提供的編譯工具javac將源程式碼編譯後生成的位元組碼文件以.class為後綴,使用Java提供的運行工具java即可運行位元組碼文件。