Java文件是独立于系统的吗?

Java文件是独立于系统的吗?,java,Java,许多人过去常说Java是一种独立于系统的编程语言;使用适当的OS JVM,可以在任何OS中运行(中断)相同的.class文件。 我的问题是,.java文件本身也是独立于系统的吗?i、 是一个在一个操作系统中编写(并且可以正确编译)的.java文件,可以在另一个操作系统中正确编译吗?如果没有,你有什么例子来说明这一点吗 谢谢 只要.java文件遵循API语法和正确版本,它就可以在任何操作系统上编译,而不管它在哪里编码。简短回答,是的。回答很长,是的 正如jedwards在对您的问题的评论中指出的那

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


谢谢

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

简短回答,是的。回答很长,是的

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

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

因此,严格地说,只要您使用的JDK版本可用于您的操作系统,并且您使用的任何本机库(比如JNI)可用于您的操作系统,那么.java文件在编译时都不会出现任何问题。现在,它是否运行完全是另一个问题


旁注:在我的上一份工作中,我们同时使用Mac OS X 10.4+、Ubuntu 8.04+和Windows XP/Server 2003+进行软件开发,除了偶尔不运行之外,它从未造成任何问题,但是在编译过程中绝不会出现任何问题。

java编译器被移植到mac/win/linux,并将生成一个有效且可能相等的二进制文件,因为其中可能有时间戳。
并且.class格式是通用的,因此任何VM端口都能够正确读取它们。答案取决于:

如果出错,源代码不是独立于系统的

一个例子:

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

另一个例子:

如果您有一个带有依赖于系统的插件的定制JVM,那么使用此类my的程序在其他系统中将变得不可用。这更像是一个classpth问题


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

>>如果没有,您有任何示例来说明这一点吗?:并非所有的.java源代码都可以为Android操作系统编译,尽管它们都是“.java”。重要的不是文件扩展名,而是源代码是为什么Java API/VM编写的。使用Java 1.6的特性的.Java文件不会使用Java 1.4编译compiler@carnold,问题不是Java源代码,而是.Java文件。Dalvik(Android VM)使用.java文件。我指的是java源文件,而不是.java:)@jedwards Dalvik不使用*.class文件我认为源文件编码(UTF-8或其他)会导致平台依赖性。