我有时想知道为什么Java被称为平台无关的语言?
我找不到以下问题的合适解释:
- JVM在Windows/Linux/Mac OS上是否相同?
- 在以上环境中,是否对于同一类生成相同的字节码?
如果上述问题的答案是否定的,那么如何实现平台无关性。
请帮我了解这个基本概念。
我有时想知道为什么Java被称为平台无关的语言?
我找不到以下问题的合适解释:
如果上述问题的答案是否定的,那么如何实现平台无关性。
请帮我了解这个基本概念。
1)Windows/Linux/Mac OS使用的JVM是相同的吗?
答案 ===> 不是,每个操作系统需要不同的 JVM。
2)在上述环境下,同一类别生成的字节码相同吗?
答案 ====> 是的,生成的字节码将是相同的。
以下解释将为您提供更多澄清。
{App1(Java代码)------>App1byteCode}........{(JVM+MacOS) 可帮助处理App1、App2、App3} {App2(Java代码)----->App2byteCode}........{(JVM+LinuxOS) 可帮助处理App1、App2、App3} {App3(Java代码)----->App3byteCode}........{(JVM+WindowsOS) 可帮助处理App1、App2、App3}
这是如何发生的?
答案--> JVM 有能力读取字节码并根据底层操作系统作出响应,因为 JVM 与操作系统同步。
所以我们发现,需要与特定平台同步的 JVM。
但主要的问题是,程序员不必知道特定平台的具体知识,可以编写他的应用程序。
使用 Java 语言编写程序,将其编译为字节码并在任何计算机上运行(是的,需要 与平台相关的 JVM 来执行它),使 Java 平台无需依赖于特定操作系统。
观看这个两分钟的视频教程,希望能帮助你理解为什么Java是跨平台的?所有内容都在短短的2分37秒内解释清楚了。
以下是解释:
运行任何Java程序需要两个步骤: (i) 编译步骤 (ii) 解释步骤。
Java编译器通常称为“javac”,用于编译任何Java文件。在编译过程中,Java编译器将编译Java文件的每个语句。如果Java程序包含任何错误,则会在输出屏幕上生成错误消息。在编译过程成功完成后,编译器将创建一个新文件,称为类文件/二进制编码文件/字节码文件/魔术代码文件。
生成的类文件是一个二进制文件,因此需要Java解释器(通常称为Java)来解释类文件的每个语句。成功解释过程后,机器将在输出屏幕上生成输出。
这个生成的类文件是一个二进制编码文件,它依赖于Java解释器提供的组件,不依赖于操作系统中可用的工具和组件。当你在Java中运行一个应用程序时,会发生两件事情:
Java编译器(javac)将源代码编译成字节码(存储在.class文件中)
Java字节码(.class)是与操作系统无关的,它在所有不同的操作系统中具有相同的扩展名。但由于这不特定于任何操作系统或其他环境,没有人可以运行它(除非有一台机器的本地指令集是字节码,即它们可以理解字节码本身)。
JVM加载并执行字节码
虚拟机(VM)是一种计算机程序的软件实现,它像物理机一样执行程序。Java也有一个名为Java虚拟机(JVM)的虚拟机。
简而言之,Java代码将被编译成字节码,这是平台无关的。Java有一个虚拟机(JVM),针对不同平台(操作系统等)具有特定的虚拟机,可以加载和解释这些字节码到机器特定的代码。
参考: