2008-09-22 56 views

回答

6

Java SE 6 Compatibility頁面列出了Jave SE 6與Java SE 5.0的兼容性。此外,還有一個鏈接到Incompatibilities in J2SE 5.0 (since 1.4.2)以及。通過查看這兩個文檔,應該有可能找出是否存在任何在JDK 1.4.2和Java SE 6下編寫的程序的兼容性問題。

就Java類文件的二進制兼容性而言,Java SE 6兼容性頁面有以下說:

Java SE 6的是向上的二進制兼容 與J2SE 5.0除 incompatibilities如下。除了 的注意不兼容性,類 文件與5.0版編譯器編譯 將在JDK正常運行6.

因此,在一般情況下,workmad3指出,在舊的JDK編譯的Java類文件仍然將是兼容的與最新版本。此外,如Desty所述,對API的任何更改通常都被棄用而不是刪除。

Source Compatibilities部分:

已過時的API是 只用於向後兼容性 支持的接口。除非使用 -nowarn命令行選項,否則每當使用 其中一個時,javac編譯器 會生成警告消息。建議修改程序 以消除使用 棄用的API,但目前沒有 當前計劃完全從系統中刪除此類API,其中 除了JVMDI和JVMPI之外的其他 。

Java SE 6 Performance White Paper有一長長的性能改進列表。

0

理論上什麼都沒有。 JVM被認爲是向後兼容的。我自己,我從來沒有遇到過這個問題。

0

完全取決於您正在使用的Java庫的哪些部分。它可以是任何'絕對很好,沒有任何區別','OMG!爲什麼它只是格式化我的硬盤?' (好吧,也許不是第二個,但是它支持從無到有的一點:))。

你的班級也可以選擇圖書館裏的錯誤修正,這意味着錯誤的錯誤會消失(或者可以根據你是否依賴錯誤行爲來引入錯誤)。但是,儘管如此,java字節碼是向後兼容的,所以你不應該得到任何問題,只是沒有做任何事情。

-2

它應該工作。我不記得遇到任何問題,除非Java API的某些部分已被棄用,在這種情況下,它會解釋它們是什麼,您可以希望編寫一個解決方法。 當然,在JRE 1.5中運行使用JDK 1.6編譯的類文件會導致一個問題 - 即使只有JRE,只有較小的構建版本會導致錯誤。

0

一個積極的結果是1.4類仍然會利用JVM的速度改進(儘管對庫類沒有進行必要的改進)。

0

剛碰到這樣的問題我自己。我編寫的代碼應該可以和1.6一起工作,但大學已經安裝了1.3。很多方法都不起作用,例如:

input =「」+ JOptionPane.showInputDialog(null,「Enter a four digit number to」+(b?「encrypt」:「decrypt」)+「。」,( b 「4086」: 「5317」));?

是行不通的,但是

輸入= 「」 + JOptionPane.showInputDialog(NULL, 「輸入一個四位數字到」 +(B? 「加密」: 「解密」)+ 「」);

會。接受三個agruments的inputdialog方法在1.3中不存在縫隙。

這只是一個漫長的說法,在1.3的結果導致頭部砰擊事件時,使用1.6 api。

+0

heh :)當然。能夠做到這一點需要1.3向前兼容,我從來沒有遇到過一個API,畢竟,如果它的功能與舊版本相同,那麼寫一個新版本有什麼意義?)) – workmad3 2008-09-22 12:27:39

5

Java類是正向兼容,例如,使用1.5編譯器生成的類將在JRE 1.6上成功加載並執行而沒有任何問題。一般來說,今天Java編譯器生成的類將與將來的JRE(例如Java7)兼容。

反轉不成立:您不能在較早的JRE(1.3,1.4等)上運行由1.6生成的類。

1

Java編譯器指定源和目標合規性級別。這樣,您可以從任何其他更高版本的JRE編譯任何JRE。您需要確保使用這些合規性級別,因爲JRE之間存在API差異。例如,JRE 1.5在編譯器級引入了StringBuilder。這意味着你做的任何時間:

String s = "string1" + "string2"; 

編譯器將其更改爲:

String s = new StringBuilder("string1").append("string2").toString(); 

顯然,當你試圖構建的StringBuilder,這將有出現NoClassDefFoundError打破。

相關問題