3 回答

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
請(qǐng)注意,要使某些東西向后兼容,必須有一個(gè)對(duì)等兼容的對(duì)象(有意或無(wú)意)。例如:DVD閱讀器向后兼容CD還是CD向前兼容DVD閱讀器?
在這種情況下,取決于您查看的是編譯器(或其生成的字節(jié)碼)還是虛擬機(jī)。
編譯器不向后兼容,因?yàn)槭褂肑ava5 JDK生成的字節(jié)碼將無(wú)法在Java 1.4 jvm中運(yùn)行(除非使用該-target 1.4
標(biāo)志進(jìn)行編譯)。但是JVM是向后兼容的,因?yàn)樗梢赃\(yùn)行舊的字節(jié)碼。
因此,我想他們選擇從Javac的角度考慮兼容性(因?yàn)樗荍DK的特定部分),這意味著生成的字節(jié)碼可以在jvm的未來(lái)版本中運(yùn)行(與JRE更相關(guān)) ,也捆綁在JDK中)。
簡(jiǎn)而言之,我們可以說(shuō):
JDK(通常)是向前兼容的。
JRE(通常)是向后兼容的。
(這也是一個(gè)應(yīng)該在很久以前學(xué)習(xí)的課程:編寫(xiě)編譯器的人通常是正確的,而我們使用它們的人是錯(cuò)誤的xD)
順便說(shuō)一句,將向后/向前和向下/向上配對(duì)而不是將它們混合起來(lái)更有意義嗎?

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
擴(kuò)展答案以包括最新的Java…
Java SE 7和JDK 7的兼容性
Oracle的未注明日期頁(yè)面的引言:
兼容性是一個(gè)復(fù)雜的問(wèn)題。本文檔討論了與Java平臺(tái)的發(fā)行有關(guān)的三種潛在的不兼容性:
源:源兼容性涉及將Java源代碼轉(zhuǎn)換為類文件,包括代碼是否仍在編譯。
二進(jìn)制:二進(jìn)制兼容性在Java語(yǔ)言規(guī)范中定義為保留無(wú)錯(cuò)誤鏈接的能力。
行為:行為兼容性包括在運(yùn)行時(shí)執(zhí)行的代碼的語(yǔ)義。
…和
Java SE 7和Java SE 6之間的不兼容性Java SE 7與 Java平臺(tái)的早期版本高度兼容。幾乎所有現(xiàn)有程序都應(yīng)在Java SE 7上運(yùn)行,而無(wú)需進(jìn)行任何修改。但是,在JRE和JDK中存在一些較小的潛在來(lái)源和二進(jìn)制不兼容問(wèn)題,這些情況涉及極少數(shù)情況和“角落情況”,此處出于完整性目的對(duì)其進(jìn)行了記錄。
Java SE 7在語(yǔ)言,JVM或Java SE API中的不兼容性
…和
JDK 7和JDK 6之間的不兼容性
Javac,HotSpot或Java SE API中的JDK 7不兼容
(那里沒(méi)有序言–只是不兼容的列表。)

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
僅向后。前向兼容(“優(yōu)雅地接受打算供其自身更高版本使用的輸入”)將要求1.5 JVM能夠運(yùn)行1.6編譯的代碼,而這不能。
向后要求“如果它可以使用較舊設(shè)備生成的輸入”,這是正確的,因?yàn)?.6 JVM可以運(yùn)行1.5編譯代碼。
JDK / JRE的每個(gè)發(fā)行版都與Java字節(jié)碼的版本一致。每個(gè)編譯器都會(huì)生成特定字節(jié)碼版本的代碼。每個(gè)JVM都了解特定字節(jié)碼版本的版本和所有較早版本。
當(dāng)JVM加載一個(gè)類時(shí),它會(huì)檢查字節(jié)碼版本,如果它大于JVM最新理解的版本,則會(huì)收到錯(cuò)誤消息。(ClassVersionError之類的)。
添加回答
舉報(bào)