Java 實現(xiàn)跨平臺的操作方式
什么是平臺無關(guān)性
平臺無關(guān)性就是一種語言在計算機上的運行不受平臺的約束,一次編譯,到處執(zhí)行。
也就是說,用Java創(chuàng)建的可以執(zhí)行二進制程序,能夠不加改變的運行于多個平臺,Java減少了開發(fā)和部署的多個平臺的成本和時間。
平臺無關(guān)性的實現(xiàn)
其中扮演者重要的角色有Java語言規(guī)范、Class文件、Java虛擬機(JVN)等。
在計算機世界中,計算機只認識0和1.所以,真正被執(zhí)行的其實是由0和1組成的二進制文件。
日常開發(fā)使用的C、C++、Java、python 都屬于是高級語言,而非二進制語言,所以,想讓計算機認識我們寫出來的Java代碼,那就需要
把他翻譯成由0和1組成的二進制文件。這個過程就叫編譯。負責(zé)這一個過程的處理的工具叫做編譯器。
想把Java文件,編譯成二進制文件文件,需要經(jīng)過兩步編譯,前端編譯和后端編譯。
前端編譯主要是指與源語言有關(guān)但與目標(biāo)機無關(guān)的部分。Java中,我們知道的 javac 的編譯就是前端編譯。除了這種以外,我們使用的很多IDE如eclipse,idea等,都是內(nèi)置了前端編譯器,
主要功能就是.java文件轉(zhuǎn)換為.class文件。
后端編譯主要是將中間代碼再翻譯成機器語言。Java中,這一步驟就是后端編譯(jvm來執(zhí)行)。
Java虛擬機
之所以跨平臺是由jvm來完成的,jvm會根據(jù)不用的操作系統(tǒng)和硬件設(shè)備,提供不同jvm。對于不同的操作系統(tǒng)jvm對應(yīng)的質(zhì)指令是不同的class文件。
比如同樣執(zhí)行a+b,A操作系統(tǒng)對應(yīng)的二進制指令可能是10001000,而B操作系統(tǒng)對應(yīng)的指令可能是11101110。那么,想要做到跨平臺,最重要的就是可以根據(jù)對應(yīng)的硬件和操作系統(tǒng)生成對應(yīng)的二進制指令。
有了Java虛擬機,想要執(zhí)行a+b操作,A操作系統(tǒng)上面的虛擬機就會把指令翻譯成10001000,B操作系統(tǒng)上面的虛擬機就會把指令翻譯成11101110。
所以,Java之所以可以做到跨平臺,是因為Java虛擬機充當(dāng)了橋梁。他扮演了運行時Java程序與其下的硬件和操作系統(tǒng)之間的緩沖角色。
class字節(jié)碼
各種不同的平臺的虛擬機都使用統(tǒng)一的程序存儲格式——字節(jié)碼(ByteCode)是構(gòu)成平臺無關(guān)性的另一個基石。Java虛擬機只與由字節(jié)碼組成的Class文件進行交互。 我們說Java語言可以Write Once ,Run Anywhere。這里的Write其實指的就是生成Class文件的過程。 因為Java Class文件可以在任何平臺創(chuàng)建,也可以被任何平臺的Java虛擬機裝載并執(zhí)行,所以才有了Java的平臺無關(guān)性。class 是16進制的文件流,最終會被jvm轉(zhuǎn)成二進制的機械碼。
Java語言規(guī)范
已經(jīng)有了統(tǒng)一的Class文件,以及可以在不同平臺上將Class文件翻譯成對應(yīng)的二進制文件的Java虛擬機,Java就可以徹底實現(xiàn)跨平臺了嗎? 其實并不是的,Java語言在跨平臺方面也是做了一些努力的,這些努力被定義在Java語言規(guī)范中。 比如,Java中基本數(shù)據(jù)類型的值域和行為都是由其自己定義的。而C/C++中,基本數(shù)據(jù)類型是由它的占位寬度決定的,占位寬度則是由所在平臺決定的。所以,在不同的平臺中,對于同一個C++程序的編譯結(jié)果會出現(xiàn)不同的行為。 舉一個簡單的例子,對于int類型,在Java中,int占4個字節(jié),這是固定的。 但是在C++中卻不是固定的了。在16位計算機上,int類型的長度可能為兩字節(jié);在32位計算機上,可能為4字節(jié);當(dāng)64位計算機流行起來后,int類型的長度可能會達到8字節(jié)。根據(jù)規(guī)范格式,才能夠被jvm編譯以及解釋運行。
總結(jié)
對于Java的平臺無關(guān)性的支持是分布在整個Java體系結(jié)構(gòu)中的。
其中扮演著重要角色的有Java語言規(guī)范、Class文件、Java虛擬機等。
Java語言規(guī)范
通過規(guī)定Java語言中基本數(shù)據(jù)類型的取值范圍和行為
Class文件
所有Java文件要編譯成統(tǒng)一的Class文件
Java虛擬機
通過Java虛擬機將Class文件轉(zhuǎn)成對應(yīng)平臺的二進制文件等 Java的平臺無關(guān)性是建立在Java虛擬機的平臺有關(guān)性基礎(chǔ)之上的,是因為Java虛擬機屏蔽了底層操作系統(tǒng)和硬件的差異。
以上這篇Java 實現(xiàn)跨平臺的操作方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. XML在語音合成中的應(yīng)用2. jscript與vbscript 操作XML元素屬性的代碼3. 不要在HTML中濫用div4. HTML5實戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)5. .NET Framework各版本(.NET2.0 3.0 3.5 4.0)區(qū)別6. ASP基礎(chǔ)入門第四篇(腳本變量、函數(shù)、過程和條件語句)7. ASP將數(shù)字轉(zhuǎn)中文數(shù)字(大寫金額)的函數(shù)8. XML入門的常見問題(三)9. php使用正則驗證密碼字段的復(fù)雜強度原理詳細講解 原創(chuàng)10. HTTP協(xié)議常用的請求頭和響應(yīng)頭響應(yīng)詳解說明(學(xué)習(xí))
