溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java語(yǔ)言與平臺(tái)有什么關(guān)系

發(fā)布時(shí)間:2020-04-24 09:57:38 來源:億速云 閱讀:304 作者:小新 欄目:編程語(yǔ)言

今天小編給大家分享的是java語(yǔ)言與平臺(tái)有什么關(guān)系,相信很多人都不太了解,為了讓大家更加了解java語(yǔ)言與平臺(tái)的關(guān)系,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。一定會(huì)有所收獲的哦。

java語(yǔ)言與平臺(tái)有什么關(guān)系

為什么說java語(yǔ)言與平臺(tái)無關(guān)?

一、平臺(tái)與機(jī)器指令

無論哪種編程語(yǔ)言編寫的應(yīng)用程序都需要經(jīng)過操作系統(tǒng)和處理器來完成程序的運(yùn)行,因此這里的平臺(tái)是由OS和CPU所構(gòu)成的,所謂的平臺(tái)無關(guān)就是指軟件的運(yùn)行不會(huì)因操作系統(tǒng)、處理器的變化而無法運(yùn)行或出現(xiàn)運(yùn)行錯(cuò)誤。

每個(gè)平臺(tái)都有自己獨(dú)特的機(jī)器指令,所謂平臺(tái)的機(jī)器指令就是可以被該平臺(tái)直接識(shí)別、執(zhí)行的一種由0和1組成的序列代碼。相同的CPU和不同的OS所形成的平臺(tái)的機(jī)器指令可能是不同的

二、何為與平臺(tái)相關(guān)?

C/C++程序是依賴平臺(tái)的:C/C++源程序所在的特定平臺(tái)對(duì)其源文件進(jìn)行編譯、鏈接,生成機(jī)器指令,即根據(jù)當(dāng)前平臺(tái)的機(jī)器指令生成可執(zhí)行文件,所以其可以在任何與當(dāng)前平臺(tái)相同的平臺(tái)上運(yùn)行這個(gè)可執(zhí)行文件。但是,不能保證C/C++源程序所產(chǎn)生的可執(zhí)行文件在所有平臺(tái)上都能正確的運(yùn)行,其原因是不同平臺(tái)可能具有不同的機(jī)器指令。所以,一旦更換了平臺(tái),就可能需要修改源程序,并針對(duì)新的平臺(tái)重新編譯源程序,也就是與平臺(tái)相關(guān)。

C/C++程序無法跨平臺(tái)的根本原因是C/C++源程序的編譯器針對(duì)平臺(tái)進(jìn)行編譯,而不同的平臺(tái)有不同的機(jī)器指令,所以無法跨平臺(tái)。

三、Java為何可以跨平臺(tái)

C/C++之所以不能跨平臺(tái),就是因?yàn)镃/C++源程序是對(duì)平臺(tái)編譯的,所以與平臺(tái)密切相關(guān)。如果有這樣的一個(gè)環(huán)境:它既可以向下兼容(對(duì)平臺(tái)兼容),又可以向上兼容(程序可以運(yùn)行),那么不就可以跨平臺(tái)了嗎?;谶@樣的原理,Java在計(jì)算機(jī)的操作系統(tǒng)上又提供了一個(gè)Java運(yùn)行環(huán)境——JRE(安裝JDK)。

JRE由Java虛擬機(jī),類庫(kù)和一些核心文件組成,也就是說,只要平臺(tái)提供了Java運(yùn)行環(huán)境,Java編寫的軟件就可以在其上運(yùn)行。

和C/C++不同的是,Java語(yǔ)言提供的編譯器不針對(duì)特定的操作系統(tǒng)和CPU芯片進(jìn)行編程,而是針對(duì)Java虛擬機(jī)把Java源程序編譯成稱為字節(jié)碼的“中間代碼”,然后Java虛擬機(jī)負(fù)責(zé)將字節(jié)碼翻譯成虛擬機(jī)所在平臺(tái)的機(jī)器碼,并讓當(dāng)前平臺(tái)運(yùn)行該機(jī)器碼。

Java語(yǔ)言的運(yùn)行原理:

在一個(gè)計(jì)算機(jī)上編譯得到的字節(jié)碼文件(就是.class文件),可以復(fù)制到任何一個(gè)安裝了Java運(yùn)行環(huán)境的計(jì)算機(jī)上直接運(yùn)行。然后字節(jié)碼文件由虛擬機(jī)負(fù)責(zé)解釋執(zhí)行,即Java虛擬機(jī)將字節(jié)碼翻譯成本地計(jì)算機(jī)的機(jī)器碼,然后將機(jī)器碼交給本地的操作系統(tǒng)運(yùn)行。

由于在一個(gè)計(jì)算機(jī)上編譯得到的字節(jié)碼文件可以復(fù)制到任何一個(gè)安裝了Java運(yùn)行環(huán)境的計(jì)算機(jī)上直接使用,所以字節(jié)碼其實(shí)是一種“中間代碼”,這也就是為什么“Java語(yǔ)言能夠一次編譯,處處運(yùn)行,也就是Java跨平臺(tái)的原因?!彼苑QJava是一種“半編譯,半解釋的語(yǔ)言”,即源程序——>編譯——>字節(jié)碼——>字節(jié)碼解釋程序——>對(duì)應(yīng)平臺(tái)的機(jī)器語(yǔ)言?!?/p>

以上就是java語(yǔ)言與平臺(tái)有什么關(guān)系的詳細(xì)內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎來億速云行業(yè)資訊!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI