在JRE 1.6或1.5上運行在JDK 1.4.2中編譯的Java類文件的後果是什麼?在不同的JRE上運行Java類文件的後果?
回答
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的任何更改通常都被棄用而不是刪除。
已過時的API是 只用於向後兼容性 支持的接口。除非使用 -nowarn命令行選項,否則每當使用 其中一個時,javac編譯器 會生成警告消息。建議修改程序 以消除使用 棄用的API,但目前沒有 當前計劃完全從系統中刪除此類API,其中 除了JVMDI和JVMPI之外的其他 。
Java SE 6 Performance White Paper有一長長的性能改進列表。
理論上什麼都沒有。 JVM被認爲是向後兼容的。我自己,我從來沒有遇到過這個問題。
完全取決於您正在使用的Java庫的哪些部分。它可以是任何'絕對很好,沒有任何區別','OMG!爲什麼它只是格式化我的硬盤?' (好吧,也許不是第二個,但是它支持從無到有的一點:))。
你的班級也可以選擇圖書館裏的錯誤修正,這意味着錯誤的錯誤會消失(或者可以根據你是否依賴錯誤行爲來引入錯誤)。但是,儘管如此,java字節碼是向後兼容的,所以你不應該得到任何問題,只是沒有做任何事情。
它應該工作。我不記得遇到任何問題,除非Java API的某些部分已被棄用,在這種情況下,它會解釋它們是什麼,您可以希望編寫一個解決方法。 當然,在JRE 1.5中運行使用JDK 1.6編譯的類文件會導致一個問題 - 即使只有JRE,只有較小的構建版本會導致錯誤。
一個積極的結果是1.4類仍然會利用JVM的速度改進(儘管對庫類沒有進行必要的改進)。
剛碰到這樣的問題我自己。我編寫的代碼應該可以和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。
Java類是正向兼容,例如,使用1.5編譯器生成的類將在JRE 1.6上成功加載並執行而沒有任何問題。一般來說,今天Java編譯器生成的類將與將來的JRE(例如Java7)兼容。
反轉不成立:您不能在較早的JRE(1.3,1.4等)上運行由1.6生成的類。
Java編譯器指定源和目標合規性級別。這樣,您可以從任何其他更高版本的JRE編譯任何JRE。您需要確保使用這些合規性級別,因爲JRE之間存在API差異。例如,JRE 1.5在編譯器級引入了StringBuilder。這意味着你做的任何時間:
String s = "string1" + "string2";
編譯器將其更改爲:
String s = new StringBuilder("string1").append("string2").toString();
顯然,當你試圖構建的StringBuilder,這將有出現NoClassDefFoundError打破。
- 1. Java EE是否在Java SE的JRE上運行?
- 2. 開始使用相同的JRE運行Java程序的單獨過程JRE
- 3. 在同一臺PC上運行兩個針對單獨JRE的Java Web Apps
- 4. 運行的gnuplot在不同的文件
- 5. 同時運行在同一個JVM上運行的java程序?
- 6. 如何在不同的可運行線程中讀取不同的文件Java
- 7. 如何在同一個src文件夾中運行不同的.kt文件/類?
- 8. 不與JRE運行8
- 9. 同時運行相同的java類由不同的shell
- 10. 問題,當在Windows上運行JRE
- 11. 在java文件上運行再次運行之前執行的文件
- 12. java在運行時生成類文件
- 13. Android:在不同類文件中運行的參數
- 14. 在不同的端口上在tomcat上運行不同的webapps
- 15. 運行32位java和64位java產生不同的結果
- 16. 在不同的計算機上運行.exe文件(visual studios)
- 17. 我如何解決IDE在jre上運行jre而不是android studio?
- 18. 代碼不會在JRE運行1.6
- 19. 使用自定義JRE運行java
- 20. 的JavaME:讓模擬器運行不同JRE
- 21. 強制Java applet運行在32位而不是64位JRE
- 22. 如果applet在瀏覽器的JRE中運行,爲什麼在機器上需要JRE?
- 23. 在Java的不同線程中運行後臺進程
- 24. Java類/ JSP文件上的運行部署
- 25. 從網站上的PHP腳本運行Java類文件
- 26. 在Windows和Linux上運行java awt代碼時出現的不同結果
- 27. 不能運行* .java下載的文件
- 28. 相同的java代碼不能在不同的機器上運行
- 29. 在沒有安裝jre的情況下運行java?
- 30. 如何使用jar文件打包JRE以在獨立於Java的機器上運行
heh :)當然。能夠做到這一點需要1.3向前兼容,我從來沒有遇到過一個API,畢竟,如果它的功能與舊版本相同,那麼寫一個新版本有什麼意義?)) – workmad3 2008-09-22 12:27:39