我在Ubuntu中編寫了一些Java代碼,但現在我需要程序在Mac中運行(它不應該是現成的產品,我只是希望能夠編譯源代碼)。我只是想知道,在Mac中編譯時,是否會有很多代碼需要更改?Java編譯器與Linux/Windows上的編譯器相同嗎?
回答
Java的核心思想之一是write once, run anywhere--換句話說,你只需編寫和編譯一次代碼,然後它就可以在任何安裝了JVM的平臺上運行(使用正確的版本)。因此,您無需爲Mac或任何其他操作系統重新編譯您的代碼。
Java編譯爲bytecode而不是本機機器碼。 Java虛擬機解釋並執行該字節碼,並使用just-in-time compiler將其轉換爲本機機器碼,以使其運行速度更快。
你的程序使用Swing並不重要 - 這本身並不意味着它不適用於Mac。
它不起作用的唯一原因是,如果您在代碼中使用硬編碼的操作系統特定的東西,如硬編碼Windows路徑(如C:\Program Files
等) - Mac OS上不存在這些課程X或Windows以外的其他操作系統。
只要你有正確的JRE安裝程序,你的程序應該運行,只要你沒有硬件編碼依賴關係在它運行的機器上(即硬編碼文件路徑等)。
是真的,只要所有使用的類都來自內置類或從內建類派生。 – 2011-06-14 04:44:44
@jcomeau_ictx右邊 - 理想情況下它應該是一個FAT jar(即與所有依賴包裝在一起的jar)。 – CoolBeans 2011-06-14 04:45:55
編譯後的字節碼將是相同的;但如果您使用的是Mac上不可用的類,那麼您將需要做更多的工作。
我有非常規的環境,我沒有使用任何額外的類。會這樣嗎? :S – nicks 2011-06-14 04:44:44
它應該工作。這就是我敢說的。 – 2011-06-14 04:45:56
不要編譯任何東西!只要給他們的罐子。本地JVM將完成剩下的工作。這就是Java的工作原理。免責聲明:如果您需要第三方圖書館罐子,您可能還需要發貨,或創建一個包含您需要的第三方罐子的戰爭檔案(或類似包裝)。
Java使用JVM或Java Virtual Machine來運行您編譯的代碼。只要你沒有在你的程序中使用任何奇怪的操作系統特有的功能(比如綁定到非Java庫或運行系統命令),你的「編譯」Java就可能運行在大多數Java實現上。
有多個JVM版本和多個JVM實現,所以如果你不記住這一點,你可以可以運行到compatibility issues。
- 1. g ++編譯器與C++的gcc編譯器相同嗎? (Mac OS X)
- 2. Java編譯器
- 3. 編譯器如何編譯編譯器?
- 4. F#編譯器是否支持與C#編譯器相同的foreach優化
- 5. 與編譯器的協同編程
- 6. 編譯器編譯也包含了嗎?
- 7. 以JAR格式編譯Java編譯器?
- 8. 有效的編譯器每次都會編譯完全相同的結果嗎?
- 9. Java反編譯器
- 10. 編譯器在Java
- 11. Java編譯器ASP.NET
- 12. java反編譯器
- 13. 具有相關類的Java編譯器
- 14. GNU的Java編譯器(GCJ)死了嗎?
- 15. 編譯編譯器錯誤編譯GCC
- 16. Java編譯器/解釋器
- 17. 在不同平臺上編譯的編譯器指令
- 18. 與Java編譯
- 19. 在Windows上有ActionScript的編譯器嗎?
- 20. 用於Java的語法編譯器編譯器
- 21. Android的Java編譯器opimization
- 22. netbeans的Java反編譯器
- 23. 編譯器錯誤:Java的
- 24. 將編譯器與編輯器關聯
- 25. c#編譯器比VB.NET編譯器更聰明嗎?
- 26. make:用不同的編譯器強制重新編譯相同的對象
- 27. 的Java反編譯器和Java反編譯
- 28. LLVM 5.0編譯器是否等同於GCC編譯器?
- 29. DotLess LessCss編譯器不同於WebEssentials LessCss編譯器
- 30. Windows上的Mac編譯器
軟件涉及到Swing GUI! – nicks 2011-06-14 04:41:24
爲什麼你想象Mac有很多改變? Mac/Linux都來自Unix風格的內核。 Windows可能有很大的不同。然而,生成(編譯)的字節碼在任何地方都是一樣的。 Java Bytecode是所有JVM的標準。 – 2011-06-14 04:48:56
無論32位/ 64位還是Linux/Windows,Sun/Oracle編譯器生成的字節碼都是相同的。您可能會在字節碼中看到IBM/Eclipse編譯器的細微差異,但它們不會影響GUI。 – 2011-06-14 08:12:53