Java是可以跨平臺(tái)的編程語(yǔ)言,那我們首先得知道什么是平臺(tái),我們把CPU處理器與操作系統(tǒng)的整體叫平臺(tái)。
使用特定編譯器編譯的程序只能在對(duì)應(yīng)的平臺(tái)運(yùn)行,這里也可以說(shuō)編譯器是與平臺(tái)相關(guān)的,編譯后的文件也是與平臺(tái)相關(guān)的。我們說(shuō)的語(yǔ)言跨平臺(tái)是編譯后的文件跨平臺(tái),而不是源程序跨平臺(tái)。
java實(shí)現(xiàn)跨平臺(tái)的方法:
什么是平臺(tái)無(wú)關(guān)性
平臺(tái)無(wú)關(guān)性就是一種語(yǔ)言在計(jì)算機(jī)上的運(yùn)行不受平臺(tái)的約束,一次編譯,到處執(zhí)行。
也就是說(shuō),用Java創(chuàng)建的可以執(zhí)行二進(jìn)制程序,能夠不加改變的運(yùn)行于多個(gè)平臺(tái),Java減少了開發(fā)和部署的多個(gè)平臺(tái)的成本和時(shí)間。
平臺(tái)無(wú)關(guān)性的實(shí)現(xiàn)
其中扮演者重要的角色有Java語(yǔ)言規(guī)范、Class文件、Java虛擬機(jī)(JVN)等。
在計(jì)算機(jī)世界中,計(jì)算機(jī)只認(rèn)識(shí)0和1.所以,真正被執(zhí)行的其實(shí)是由0和1組成的二進(jìn)制文件。
日常開發(fā)使用的C、C++、Java、python 都屬于是高級(jí)語(yǔ)言,而非二進(jìn)制語(yǔ)言,所以,想讓計(jì)算機(jī)認(rèn)識(shí)我們寫出來(lái)的Java代碼,那就需要把他翻譯成由0和1組成的二進(jìn)制文件。這個(gè)過(guò)程就叫編譯。負(fù)責(zé)這一個(gè)過(guò)程的處理的工具叫做編譯器。
想把Java文件,編譯成二進(jìn)制文件文件,需要經(jīng)過(guò)兩步編譯,前端編譯和后端編譯。
對(duì)于Java的平臺(tái)無(wú)關(guān)性的支持是分布在整個(gè)Java體系結(jié)構(gòu)中的。
其中扮演著重要角色的有Java語(yǔ)言規(guī)范、Class文件、Java虛擬機(jī)等。
Java語(yǔ)言規(guī)范
通過(guò)規(guī)定Java語(yǔ)言中基本數(shù)據(jù)類型的取值范圍和行為。
Class文件
所有Java文件要編譯成統(tǒng)一的Class文件。
Java虛擬機(jī)
通過(guò)Java虛擬機(jī)將Class文件轉(zhuǎn)成對(duì)應(yīng)平臺(tái)的二進(jìn)制文件等 Java的平臺(tái)無(wú)關(guān)性是建立在Java虛擬機(jī)的平臺(tái)有關(guān)性基礎(chǔ)之上的,是因?yàn)镴ava虛擬機(jī)屏蔽了底層操作系統(tǒng)和硬件的差異。