Java完全与平台无关吗?
如果没有,那么需要注意看看用Java编写的代码可以在多平台上运行。基本上它应该适用于Windows(各种版本),Linux(所有版本),Mac和Solaris等目标平台。
答案 0 :(得分:20)
在实践中,大多数编译的字节代码都是独立于平台的,我在Java平台上开发12年的经验告诉我,从平台到平台仍然存在特质。
例如,在为PC和MacOSX开发Java 1.4 Swing应用程序时,如果父框架为空,则对话框的行为会有所不同。
另一个例子可能是使用文件系统和文件。 Java API有一些方法可以帮助开发人员避免路径分隔符(/
vs \
)的差异。在写入文件时,重要的是按预期使用FileWriter API,以便为正在编写的平台正确生成返回字符等。
因此,虽然座右铭是“一次编写,随处运行”,但我的经验是生产环境,它只需编写一次, test ,无处不在。
因此,拥有强大的单元和集成测试可以帮助解决这个问题,因为您可以在要分发软件的各种平台上执行这些测试。
尽管存在一些小问题,但使用相同的JAR在Linux,Unix,Windows和MacOSX(BSD Unix)上运行代码是很酷的。
答案 1 :(得分:14)
正如djacobson指出的那样,答案是合格的“是”。在大多数情况下,Java开发人员不必担心平台依赖性。但是,当您处理处理传统操作系统和平台功能的API时,可能会遇到问题。
例如,在处理文件I / O时,通过忽略跨平台的文件/路径分隔符之间的差异(即使用'\'
而不是File.separator
),很容易使代码平台依赖。
答案 2 :(得分:7)
在大多数情况下,是的。因为Java编译为由其虚拟机执行的字节码,所以无论虚拟机下的系统如何,它都可以通常以相同的方式运行。
然而。即使虚拟机也不受错误的影响。快速谷歌搜索会出现以下情况,例如:
http://www.ibm.com/developerworks/java/library/j-diag0521.html
行为差异可能因JVM而异。希望您不会得到依赖于任何这些情况的代码......但仔细研究是值得了解您的基础架构的限制。
答案 3 :(得分:5)
您的问题不会执行您的代码,但更可能是您必须对文件路径,可用的外部命令(如果您需要),必要的文件权限和其他不属于“Java”问题领域。除非您计划广泛使用本机代码(通过JNI),否则Java不会成为您的问题,您的环境也将如此。 这让我们回到了古老的格言:“写一次,到处测试”。
答案 4 :(得分:4)
线程优先级是需要考虑的一件事。像Solaris这样的其他操作系统比Windows具有更多的线程优先级。因此,如果您正在大量研究多线程,那么操作系统可能会影响程序的行为。
答案 5 :(得分:1)
要关注的主要问题是UI代码,以确保在您将运行的所有平台上正确表示它。
可能出现问题的另一个原因是部署到不同的应用服务器。它们之间可能存在不兼容问题。
除此之外的Java是独立于平台的,这也是它的一个弱点,因为您正在编写一个共同点,并且每个OS的许多功能都不可用。
答案 6 :(得分:1)
很少,他们应该很明显。像System.getProperty(“os.name”)显然是依赖于操作系统或它不起作用。最常见的是System.exec(),因为它调用系统上的另一个应用程序,您应该知道您调用的应用程序是否在每个系统上都是相同的(不太可能)。
答案 7 :(得分:0)
除了上述问题之外,我遇到的主要问题实际上是建立在不同的平台上,这可能不是你的要求,但可能需要注意。
OS X在使用Apple的Java发行版时尤其有罪(为什么有人想要推出他们自己的Java包装我不知道,但这是一个单独的论点,在OSX上,我认为你没有一个选择,但要使用他们的java)。您可能会或可能不会依赖的库位于完全不同的目录中,例如,如果我的记忆正确地为我提供了库而不是lib。在某些情况下,我认为IBM java在不同的Jars中打包了类。可笑!!
希望有所帮助。