Java编译器与Linux/Windows上的编译器相同吗?

问题描述:

我在Ubuntu中编写了一些Java代码,但现在我需要程序在Mac中运行(它不应该是现成的产品,我只是希望能够编译源代码)。我只是想知道,在Mac中编译时,是否会有很多代码需要更改?Java编译器与Linux/Windows上的编译器相同吗?

+0

软件涉及到Swing GUI! – nicks 2011-06-14 04:41:24

+3

为什么你想象Mac有很多改变? Mac/Linux都来自Unix风格的内核。 Windows可能有很大的不同。然而,生成(编译)的字节码在任何地方都是一样的。 Java Bytecode是所有JVM的标准。 – 2011-06-14 04:48:56

+1

无论32位/ 64位还是Linux/Windows,Sun/Oracle编译器生成的字节码都是相同的。您可能会在字节码中看到IBM/Eclipse编译器的细微差异,但它们不会影响GUI。 – 2011-06-14 08:12:53

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安装程序,你的程序应该运行,只要你没有硬件编码依赖关系在它运行的机器上(即硬编码文件路径等)。

+0

是真的,只要所有使用的类都来自内置类或从内建类派生。 – 2011-06-14 04:44:44

+0

@jcomeau_ictx右边 - 理想情况下它应该是一个FAT jar(即与所有依赖包装在一起的jar)。 – CoolBeans 2011-06-14 04:45:55

编译后的字节码将是相同的;但如果您使用的是Mac上不可用的类,那么您将需要做更多的工作。

+0

我有非常规的环境,我没有使用任何额外的类。会这样吗? :S – nicks 2011-06-14 04:44:44

+0

它应该工作。这就是我敢说的。 – 2011-06-14 04:45:56

不要编译任何东西!只要给他们的罐子。本地JVM将完成剩下的工作。这就是Java的工作原理。免责声明:如果您需要第三方图书馆罐子,您可能还需要发货,或创建一个包含您需要的第三方罐子的战争档案(或类似包装)。

Java使用JVM或Java Virtual Machine来运行您编译的代码。只要你没有在你的程序中使用任何奇怪的操作系统特有的功能(比如绑定到非Java库或运行系统命令),你的“编译”Java就可能运行在大多数Java实现上。

有多个JVM版本和多个JVM实现,所以如果你不记住这一点,你可以可以运行到compatibility issues