如果它"写一次在任何地方运行",为什么这么多Java程序告诉我为我的操作系统选择版本?

时间:2014-06-22 09:02:35

标签: java programming-languages

我对Java或编程很新。在我通过互联网来掌握这种语言的旅程中,我提出了这样的说法"写一次在任何地方运行"多次。

但我发现许多软件要求您为您的操作系统选择合适的版本。有时只有一个版本可用。

你能解释一下为什么会这样吗?

5 个答案:

答案 0 :(得分:6)

[根据评论扩展]

Java在虚拟机JVM上运行。在理想的世界中,这意味着操作系统在此背后被抽象出来,您只需要确保您的代码与JVM一起工作,这将使其与底层操作系统一起工作。这可以通过使用错误的路径分隔符或行结尾来撤消;这不是绝对真理。

应用程序可以使用许多特定于操作系统的方法/库/函数/等,这可能使您无法将自己限制在一个通用代码库中。相反,他们可能希望利用平台提供的一些优势,并使用它创建一个单独的应用程序。

声明可能应该在“以一般方式写一次,随处运行”的某处,但这不是那么活泼。

此声明通常与Java相关联,但也有其他语言包含此内容:Javascript和HTML等网络语言将在任何浏览器上运行,因为浏览器本身构成了语言与底层操作系统之间的抽象。

其他语言没有(完全?),因为它们的工作方式不同:C#将使用底层的.NET框架,因为它仅适用于Windows。存在一个跨平台变体(Mono),但考虑C#真正的跨平台将是一种夸大其词。

答案 1 :(得分:3)

编译Java程序或源代码以生成"字节码" (中间二进制格式)。其次,字节码由作为Java虚拟机(JVM)一部分的解释器执行。 "写一次,到处运行"指的是编写的应用程序是Java可以在任何具有Java虚拟机(JVM)的硬件上运行,并且JVM现在已经许可给数百个操作系统供应商系统,包括Microsoft for Windows。

答案 2 :(得分:1)

嗯,有些东西实际上是跨平台的(大多数标准Java库),而其他一些东西可能需要适合操作系统的版本。通常,这适用于使用动态库的软件,这些库不是用Java编写的。在这种情况下,不同操作系统的版本都包含了此操作系统的库。

如果仅针对一个操作系统的版本 - 可能是因为其他操作系统不存在所需的库或开发人员没有移植它。它仍然可能实际上是跨平台的,但开发人员只在一个操作系统下对其进行了测试。

答案 3 :(得分:0)

您的问题更多地基于平台依赖性/独立性。

Java是一种独立于平台的编程语言,这意味着您编写的代码将在运行Windows,Linus,Unix等的所有计算机上生成相同的输出...而无需对代码进行任何更改。要运行Java程序,您需要安装JVM(Java虚拟机)。现在JVM做了什么。好吧,它将您的代码转换为操作系统可以理解的机器代码。因此,JVM依赖于平台,因为每个操作系统都有不同的机器代码。

所以,基本上你只编写一次Java程序,可以在任何地方使用/运行。

答案 4 :(得分:0)

你可以在一个平台上编写源代码并在任何地方运行它。如果新的java版本可用但是当前版本运行代码,你可能会遇到问题。