0

过去很多人都说Java是一种独立于系统的编程语言;可以使用适当的 OS JVM 在任何 OS 中运行(拦截)相同的 .class 文件。我的问题 - .java 文件本身也是系统独立的吗?即是在一个操作系统中编写(并且可以正确编译)的 .java 文件,可以在另一个操作系统中正确编译吗?如果没有,你有什么例子可以证明这一点吗?

谢谢!

4

4 回答 4

1

只要.java文件遵循 API 语法和正确的版本,它就可以在任何操作系统上编译,而不管它是在哪里编码的。

于 2012-10-23T20:25:25.897 回答
0

简短的回答,是的。长答案,yeeeeeeesss。

正如您对问题的评论所指出的,一个例外jedwards包括 Android,因为 Android SDK 中可用的库与 Sun 分发的 JDK 不同。这更像是 JVM 特定的区别,但由于 Android 在技术上是一个操作系统,所以它很重要。这也可以扩展到 Java ME 和 Java EE,但这仍然更多地依赖于 JDK/库,而不是依赖于操作系统。

另一个例外可能是您使用专有包下的类,例如sun.*orcom.sun.*包中的类。然后它将依赖于JVM,但只要您使用正确版本的 Sun JVM,它仍然不会依赖于操作系统。

所以真的,严格来说,只要您使用的 JDK 版本可用于您的操作系统,并且您使用的任何本机库(想想 JNI)可用于您的操作系统,.java 文件就可以毫无问题地编译你的操作系统。现在它是否运行完全是另一个问题。

旁注:我们在上一份工作中同时使用 Mac OS X 10.4+、Ubuntu 8.04+ 和 Windows XP/Server 2003+ 进行软件开发,除了偶尔无法运行之外,它从未引起任何问题,但从来没有任何编译问题。

于 2012-10-23T20:26:37.223 回答
0

the java compiler is ported to mac/win/linux and will generate a valid and maybe equal binary - cause it can have timestamps inside. and the .class format is universal so that any VM port will be able to read them correctly

于 2012-10-23T20:27:32.230 回答
0

答案取决于:

如果您犯了错误,源代码不是系统独立的。

一个例子:

您使用系统相关的字符编码编写 Sourcefile。如果将该文件传输到不存在该字符编码的另一个系统,则您的文件可能无法编译。这更像是一个编译器问题。

另一个例子:

如果您有一个带有系统依赖插件的定制 JVM,那么使用这些类的程序在其他系统上可能会变得不可用。这更像是一个类问题。

如果您使用正确的编码并且不导入 com.sun.* 或 com.apple.* 等平台依赖包,则 *.java 和 *.class 是独立的。

于 2012-10-23T20:30:38.970 回答