Java完全独立于平台吗?

Java完全独立于平台吗?

如果没有,那么需要注意看看用Java编写的代码可以在多平台上运行。 基本上它应该适用于Windows(各种版本),Linux(所有版本),Mac和Solaris等目标平台。

虽然在实践中,大多数编译的字节代码都是独立于平台的,但我在Java平台上开发12年的经验告诉我,从平台到平台仍然存在特质。

例如,在为PC和MacOSX开发Java 1.4 Swing应用程序时,如果父框架为空,则对话框的行为会有所不同。

另一个例子可能是使用文件系统和文件。 Java API具有帮助保护开发人员免受路径分隔符( / vs \ )差异的方法。 在写入文件时,重要的是按预期使用FileWriter API,以便为正在写入的平台正确生成返回字符等。

因此,虽然座右铭是“一次编写,随处运行”,但我的经验是生产环境,它只需编写一次, 测试 ,无处不在。

因此,拥有强大的单元和集成测试可以为此提供帮助,因为您可以在要分发软件的各种平台上执行这些测试。

尽管存在一些小问题,但使用相同的JAR在Linux,Unix,Windows和MacOSX(BSD Unix)上运行代码是很酷的。

正如djacobson指出的那样,答案是合格的“是”。 在大多数情况下,Java开发人员不必担心平台依赖性。 但是,当您处理处理传统操作系统和平台function的API时,可能会遇到问题。

例如,在处理文件I / O时,通过忽略跨平台的文件/路径分隔符之间的差异(即使用'\'而不是File.separator ),很容易使代码平台依赖。

多半是对的。 因为Java编译为由其虚拟机执行的字节码,所以通常可以预期它的行为方式与虚拟机下的系统无关。

然而。 甚至虚拟机都不会受到bug的影响 。 快速谷歌搜索会出现以下情况,例如:

http://www.ibm.com/developerworks/java/library/j-diag0521.html

行为差异可能因JVM而异。 希望您不会得到依赖于任何这些情况的代码……但仔细研究是值得了解您的基础架构的限制。

您的问题不会执行您的代码,但更可能是您必须对文件路径,可用的外部命令(如果您需要),必要的文件权限和其他不属于“Java”的外部因素做出的假设问题域。 除非您计划广泛使用本机代码(通过JNI),否则Java不会成为您的问题,您的环境也将如此。 这让我们回到了古老的格言:“写一次,到处测试”。

线程优先级是需要考虑的一件事。 像Solaris这样的其他操作系统比Windows具有更多的线程优先级。 因此,如果您正在大量研究multithreading,那么操作系统可能会影响程序的行为。

要关注的主要问题是UI代码,以确保在您将运行的所有平台上正确表示它。

另一个可能的问题来源是部署到不同的应用服务器。 它们之间可能存在不兼容问题。

除此之外的Java是独立于平台的,这也是它的一个弱点,因为您正在编写一个共同点,并且每个单独操作系统的许多function都不可用。

很少,他们应该很明显。 像System.getProperty(“os.name”)显然是依赖于操作系统或它不起作用。 最常见的是System.exec(),因为它调用系统上的另一个应用程序,同样你应该知道你调用的应用程序是否在每个系统上都是相同的(不太可能)。

除了上述问题之外,我遇到的主要问题实际上是在不同的平台上构建,这可能不是您的要求,但可能需要注意。

当使用Apple的Java发行版时,操作系统X特别感到内疚(为什么有人想要推出他们自己的Java包装我不知道但是这是一个单独的论点,而且在OSX上我不认为你有选择但是使用他们的java)。 你可能会或可能不会依赖的库位于完全不同的目录中,例如,如果我的记忆正确地为我提供了库,而不是lib。 而且我认为IBM java在某些情况下会在不同的Jars中打包Classes。 荒谬!!

希望有所帮助。

平台独立性意味着程序的执行不依赖于操作系统的类型(可以是任何类型:Linux,Windows,Mac ..etc)。 因此,只需编译一次代码并在任何系统上运行它(在C / C ++中,我们需要为运行它的每台机器编译代码)。 Java是基于编译器( javac )和解释器(jvm)的语言。

首先使用javac编译器将您的java源代码编译为字节代码。 使用JVM可以轻松地将此字节代码转换为等效的机器代码。 我们安装的所有操作系统都提供JVM(Java虚拟机)。 因此, javac生成的字节代码是通用的,可以在任何操作系统上转换为机器代码,这就是java独立于平台的原因。