“Java is portable”是什么意思?

时间:2012-10-25 12:23:45

标签: java portability

我是Java新手。我对Java可移植性感到困惑。

如果Java语言是可移植的,那么为什么enum在J2ME中是未知的?

我是C ++程序员。在C ++中,使用哪个平台或库并不重要。 C++ language并未在所有平台上发生变化。

我的目的是开发一个只使用基本类型的Java库,如intStringArray(类似于Genetic algorithms的库)。我想在移动和桌面应用程序中使用此库。但似乎enum或其他一些关键字并不存在于所有平台中。

我想我误解了Java portability的含义。

“Java is portable”是什么意思?

7 个答案:

答案 0 :(得分:15)

Java有三种版本:ME for mobile,SE for desktops,EE for enterprise。

“Java是可移植的”是指SE版本。这意味着您可以在具有兼容JVM的任何硬件上运行Java 字节码

这并不意味着ME与SE相同,与EE相同。 EE有EJB,但SE和ME没有。这并不会降低他们的便携性。

  

C ++语言并未在所有平台上发生变化。

此声明并非严格正确。微软为他们的C ++增加了不会在其他地方运行的扩展。

ANSI C ++可能意味着便携式源代码,只要您远离特定于平台的扩展即可。它并不意味着便携式字节码;你可能需要重新编译和重新链接。

您想在手机上运行遗传算法吗?我知道移动设备已经变得非常强大,但我已经认识到GA将是服务器端功能。移动设备更像是对我的看法。

答案 1 :(得分:7)

当您构建C ++代码时,每个硬件体系结构都有自己的独特指令集(添加ax,bx ...),编译器将其转换为特定于您正在处理的系统/体系结构的机器代码。因此,您必须为不同的体系结构自定义和构建代码,以便对其进行处理。

但是java中发生的是,当你构建它时,它被编译成一个字节代码(而不是机器代码)。并且java虚拟机(JVM)将字节代码解释为可由程序运行的特定体系结构理解的指令。 每个主要架构和操作系统都有JVM,因此您在Windows上编写的代码将在MAC-OS或Linux上进行解释和运行,而无需您进行任何源代码级别的修改。 这就是为什么Java是可移植的,这就是 一次写一次运行 的座右铭来自

的原因

答案 2 :(得分:5)

Java被称为“可移植语言”,因为Java代码可以在所有主要平台上执行。更重要的是,一旦您将Java源代码编译为“字节代码”.class,这些文件就可以在任何支持Java的平台上使用而无需修改,这与许多其他语言不同,后者需要为每个平台编译“机器代码”,例如用于32位与64位环境的单独“.exe”。

主要在Windows环境中使用的“portable”的另一个含义意味着Java运行时环境可以从文件系统中的任意位置运行,而不需要“安装”,即具有重要信息存储在Windows注册表中。大多数Java应用程序也是如此,它们可以从不同的驱动器号运行,例如从任何计算机上的USB闪存驱动器等外部存储设备,而无需先安装应用程序。

答案 3 :(得分:3)

Java提供了三种不同类型的可移植性:

源代码可移植性:无论底层CPU,操作系统或Java编译器如何,给定的Java程序都应该产生相同的结果。

CPU架构可移植性:当前的Java编译器为尚不存在的CPU生成目标代码(称为字节代码)。对于要在其上运行Java程序的每个真实CPU,Java解释器或虚拟机,"执行" J代码。这个不存在的CPU允许相同的目标代码在任何存在Java解释器的CPU上运行。

OS / GUI可移植性:Java通过提供一组库函数(包含在Java提供的库中,例如awt,util和lang)来解决这个问题,这些函数与虚构的OS和虚构对话GUI。就像JVM提供虚拟CPU一样,Java库提供虚拟OS / GUI。每个Java实现都提供了实现此虚拟OS / GUI的库。使用这些库来提供所需操作系统和GUI功能的Java程序非常容易。

请参阅此link

答案 4 :(得分:2)

虽然C和C ++语言语法和语义是标准化的,但编写真正的跨平台应用程序非常困难,除非您将自己局限于极其基本的应用程序。

有许多高级别和低级别的原因 - 从endianness到如何与底层操作系统交互(例如打开一个窗口)。

此外,C / C ++源代码只能被认为是可移植的,而不是编译的结果 - 导致可执行代码和库不可移植,系统架构(例如不同的CPU)和操作系统之间存在重大差异。 / p>

Java是解决这两个问题的相当成功的尝试:

  1. Java不会将代码编译为汇编代码,而是编译为更抽象的“字节代码” - 一种伪汇编语言,由虚拟机(JVM)“解释”或“重新编译”到汇编中。这种转换通常非常有效,因为字节码主要是一种非常低级的语言。某些版本的ARM处理器甚至可以本机执行字节码。 因此,一旦编译了java应用程序,结果就可以在“任何”架构上运行(假设JVM可用于该机器)

  2. Java捆绑了一个非常大的运行时库,它不仅提供了最常见数据结构的广泛实现(以最有效的方式在JVM中为特定体系结构实现),而且还提供了“硬件和软件抽象层“ - 您可以在编码时以标准方式与系统交互,将JVM作业转换为适当的架构和OS调用。作为一个例子,Java提供了Swing框架,它允许您以独立于系统的方式创建GUI - 即,您打开一个窗口,这将转换为Windows中的Win32 / MFC调用和Linux中的XWin调用

  3. 说,java有不同的“类型”:

    1. JavaSE是最常见的
    2. JavaME是一个具有有限库且没有实现Java5.0语言更改的简化版本
    3. 供企业使用的JavaEE,与JavaSE相同,但具有更大的运行时间
    4. Android Java,主要与JavaSE兼容,但具有Android手机特有的附加功能
    5. 但是,您应该知道Java体系结构的设计允许互操作性,特别是允许混合为不同版本甚至不同“类型”构建的库

答案 5 :(得分:1)

这意味着在一台机器上编写的java程序将在任何其他机器上运行,前提是该机器具有JVM。

请参阅此link

答案 6 :(得分:0)

可移植性是指在不同计算机上运行程序的能力。在不同的机器上运行给定的程序可能需要不同的工作量(例如,无需任何工作,重新编译或对源代码进行小的更改)。当人们将Java应用程序和applet称为可移植时,它们通常意味着应用程序和applet在不同类型的机器上运行而不进行任何更改(例如重新编译或调整源代码)。