代码之家  ›  专栏  ›  技术社区  ›  YoK

Java完全独立于平台吗?

  •  28
  • YoK  · 技术社区  · 16 年前

    Java完全独立于平台吗?

    如果没有,那么需要注意的是,用Java编写的代码可以在多个平台上运行。基本上,它应该在目标平台上工作,如Windows(各种版本)、Linux(各种风格)、Mac和Solaris。

    8 回复  |  直到 9 年前
        1
  •  20
  •   Juha Syrjälä    16 年前

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

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

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

    所以,虽然我的座右铭是“写一次,到处跑”,但我的经验是,在生产环境中,它是写一次的。 测试 到处都是。

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

    尽管这里和那里都有一些小问题,但是在Linux、Unix、Windows和MacOSX(BSD-Unix)上使用相同的JAR运行代码还是很酷的。

        2
  •  14
  •   Aaron Novstrup    16 年前

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

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

        3
  •  7
  •   Dan J    16 年前

    在大多数情况下,是的。因为Java编译到由它的虚拟机执行的字节码,所以它可以 通常地 无论系统位于虚拟机下,都应以相同的方式运行。

    然而。即使是虚拟机也不能免疫 漏洞 . 例如,一个快速的谷歌搜索会显示以下内容:

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

    不同的JVM之间的行为差异可能有所不同。希望您最终不会得到依赖于这些情况的代码…但是仔细研究是值得的,以了解您的基础设施的局限性是什么。

        4
  •  5
  •   Tore A.    16 年前

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

        5
  •  4
  •   demotics2002    16 年前

    线程优先级是要考虑的一件事。例如,其他操作系统(如Solaris)的线程优先级比Windows高。因此,如果您大量工作于多线程,操作系统可能会影响程序的行为。

        6
  •  1
  •   Romain Hippeau    16 年前

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

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

    除此之外,Java是独立于平台的,这也是它的弱点之一,因为您正在编码一个共同的分母,并且每个OS的许多特征不可用。

        7
  •  1
  •   Peter Lawrey    16 年前

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

        8
  •  0
  •   Mark Lakewood    16 年前

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

    当使用Java的Apple发行版时,OSX尤其犯了这个错误(为什么任何人都想推出自己的Java包装,我不知道,但这是一个独立的论点,在OSX上,我认为你别无选择,只能使用Java)。您可能依赖或不依赖的库位于完全不同的目录中,例如,如果我的内存正确地服务于我,库而不是lib。IBM JavaI认为在某些情况下在不同的容器中封装类。可笑!!

    希望有帮助。