Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java完全独立于平台吗?_Java - Fatal编程技术网

Java完全独立于平台吗?

Java完全独立于平台吗?,java,Java,Java完全独立于平台吗 如果不是这样,那么需要注意什么才能确保用Java编写的代码能够在多个平台上运行。基本上,它应该在Windows(各种版本)、Linux(各种风格)、Mac和Solaris等目标平台上工作。在大多数情况下,是的。因为Java编译成由其虚拟机执行的字节码,所以无论虚拟机下的系统是什么,通常都可以预期它的行为方式是相同的 不过。即使是虚拟机也不能对bug免疫。例如,快速谷歌搜索会显示以下内容: 不同JVM之间的行为差异可能不同。希望您不会得到依赖于这些情况的代码。。。但仔细

Java完全独立于平台吗


如果不是这样,那么需要注意什么才能确保用Java编写的代码能够在多个平台上运行。基本上,它应该在Windows(各种版本)、Linux(各种风格)、Mac和Solaris等目标平台上工作。

在大多数情况下,是的。因为Java编译成由其虚拟机执行的字节码,所以无论虚拟机下的系统是什么,通常都可以预期它的行为方式是相同的

不过。即使是虚拟机也不能对bug免疫。例如,快速谷歌搜索会显示以下内容:


不同JVM之间的行为差异可能不同。希望您不会得到依赖于这些情况的代码。。。但仔细研究一下您的基础设施的局限性是值得的。

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


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

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

在实践中,大多数编译的字节码是独立于平台的,我在Java平台上12年的开发经验告诉我,不同平台之间仍然存在着不同的特性

例如,在为PC和MacOSX开发Java 1.4 Swing应用程序时,如果父帧为null,则对话框的行为是不同的

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

因此,虽然格言是“编写一次,在任何地方运行”,但我对生产环境的经验是,编写一次,测试,无处不在

因此,拥有强大的单元和集成测试有助于实现这一点,因为您可以在想要分发软件的各种平台上执行这些测试


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

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

可能出现问题的另一个原因是部署到不同的应用程序服务器。它们之间可能存在不兼容问题


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

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

OSX在使用苹果的Java发行版时尤其犯了这个错误(我不知道为什么有人会想推出自己的Java包,但这是另一个论点,在OSX上,我认为你除了使用他们的Java之外别无选择)。您可能依赖或不依赖的库位于完全不同的目录中,例如,如果我的内存正常,则使用库而不是lib。在某些情况下,IBMJava会将类打包在不同的JAR中。可笑


希望这能有所帮助。

很少有,而且应该很明显。像System.getProperty(“os.name”)一样,它显然依赖于操作系统,否则就无法工作。最常见的一个是Stase.Excor(),因为它调用了系统上的另一个应用程序,同样,您应该知道您调用的应用程序是否在每个系统上都相同(不可能)。

线程优先级是一个要考虑的问题。例如,其他操作系统(如Solaris)的线程优先级高于windows。因此,如果您大量使用多线程,操作系统可能会影响程序的行为。

+1很好的选择。Java为平台独立性提供的一些机制不是自动的。:)事实上,如果你使用“/”的话,它在所有方面都有效,包括在Windows上。一个“合格的是”是一个“否”,然后回答最初的问题。它可能是99.9%,但“完全独立于平台”意味着100%。在处理类路径时,您可以看到另一种情况,例如“:”和“,”使用File.separator很难看,因为在不同的系统上存储和加载路径时可能会导致错误。我更喜欢URI类。更详细地说,我个人在应用服务器(Tomcat/Websphere)和数据库(MySQL/Oracle)之间移植应用程序时遇到了麻烦。不过,通过适当的抽象,两者都没有太大的问题。坚持标准和使用抽象框架将有助于您的发展。苹果版Java的一大特点是它与苹果的UI类集成,因此一切都能更好地与桌面协同工作。其发行版的非UI部分(运行时、编译器、工具等)似乎与Sun发行版相同。感谢大家回答这个问题。有一些g