我刚开始学习Java,对于平台无关性这个主题感到困惑。
“无关性”难道不意味着Java代码应该可以在任何计算机上运行,并且不需要安装特殊软件吗?然而,JVM需要在计算机上安装。
例如,我们需要Turbo C编译器才能编译C / C ++源代码,然后执行它。计算机必须安装C编译器。
请问当Java被描述为“平台无关”的时候,这是什么意思?
我刚开始学习Java,对于平台无关性这个主题感到困惑。
“无关性”难道不意味着Java代码应该可以在任何计算机上运行,并且不需要安装特殊软件吗?然而,JVM需要在计算机上安装。
例如,我们需要Turbo C编译器才能编译C / C ++源代码,然后执行它。计算机必须安装C编译器。
请问当Java被描述为“平台无关”的时候,这是什么意思?
这是一个很好的问题,但当源代码被编译器转换成中间本地字节码时,它会一次性进行整体检查(如果发现错误),然后程序需要一个解释器逐行检查程序并直接将其转换为机器码或目标代码。每个操作系统默认情况下都不能拥有Java解释器,因为存在某些安全原因,所以您需要不惜代价地拥有JVM才能在不同的操作系统平台上运行它。平台独立性意味着该程序可以在任何操作系统上运行,如Unix、Mac、Linux、Windows等,但这并不意味着每个操作系统都能够在没有JVM的情况下运行代码,这需要规范、实现和实例。如果我进一步改变您计算机的配置,使您可以拥有一个类加载器,即使是字节码,您也可以执行Java字节码、小应用程序等。 -由Nimish :) 祝你好运
字节码并不是跨平台的,但是 JVM 使得字节码变得独立。字节码不是机器码。字节码是紧凑的数值代码、常量和引用(通常是数值地址),它们编码了对程序对象类型、作用域和嵌套深度等进行解析和语义分析的结果。因此,与直接解释源代码相比,它们可以提供更好的性能。字节码需要在执行之前被解释,这总是由 JVM 解释器完成的。
编辑:不完全正确。请参见下面的评论。
Java不能直接在任何东西上运行。它需要通过JVM转换为字节码。
由于所有主要平台都存在JVM,这使得Java通过JVM实现了跨平台。
.exe
文件。最多只需要运行时库(在一个.dll
文件中),而不是整个编译器。 - Javier