我试图了解.class文件如何在java中工作以及它们的用途是什么。我在网上找到了一些信息,但我得到了不满意的解释。
一旦我们运行编译器,我们就会得到.class文件,它是字节码。这台机器是否可读?如果没有,这就是为什么我们需要程序的解释器才能成功运行?
此外,由于.class文件相当于我们的.java程序,为什么不能通过使用VM运行.class文件来立即运行java程序,他们需要拥有.java文件也是?
答案 0 :(得分:6)
根据定义,JVM是virtual machine,它是一个模拟真实机器功能的软件机器。与真实机器一样,它具有instruction set(bytecodes),虚拟计算机体系结构和执行模型。它能够运行用这个虚拟指令集编写的代码,就像真机可以运行机器代码一样。
因此,类文件包含虚拟指令集中的指令,并且能够运行它们。就此而言,虚拟机可以解释代码本身,也可以针对当前运行的硬件架构进行编译。有些人做两件事,有些只做其中一件。
例如,Java HotSpot最初解释字节码,并逐步将代码编译为机器代码。这称为adaptive optimization。有些虚拟机总是直接编译为机器代码。
所以,你可以看到有两种不同的“编译概念”。一个是将Java代码转换为JVM字节码(从.java到.class)。并且在程序运行时发生第二个编译阶段,其中字节码可以被解释或编译为实际的机器代码。这是由JVM中的just-in-time compiler完成的。
因此,正如您所看到的,计算机无法直接运行Java程序,因为该程序不是用计算机理解的语言编写的。它用语言编写,所有JVM实现都可以理解。并且有许多操作系统和硬件架构的JVM实现。这些JVM以任何特定硬件(机器代码)翻译此通用语言(字节码)中的程序。这就是虚拟机的美妙之处。
答案 1 :(得分:4)
.class
文件是机器可读的。读取它的机器是Java虚拟机,它解释它并将其编译为本机代码(可由您的计算机执行)。
您不需要.java
个文件来运行Java代码。您只需要.class
个文件。
答案 2 :(得分:0)
它是机器可读的,但不能在裸硬件上执行。它通过Java虚拟机运行,这是一个具有非常高性能的即时编译器的解释器。有充分的理由让解释器只使用类文件的字节码。简而言之,他们是:
答案 3 :(得分:0)
Java字节码(.class
文件)不能直接执行。
它是由底层Java虚拟机解释的中间语言。当然可以进行一些优化(即即时编译)。
要运行Java程序,您只需要字节码文件,.java
文件包含源代码。
答案 4 :(得分:0)
Compiler Vs Interpreter:
编译器将整个程序作为
输入
口译员采用单一指令
输入
中间对象代码是
产生
没有中间对象代码
产生
条件控制声明是 执行得更快 条件控制声明是 执行速度较慢
内存要求:更多
(由于生成了对象代码)
内存要求:减去
不需要每次都编译程序
时间
每次更高级别的计划
转换为较低级别的程序
整个后显示错误
程序被检查
每个都显示错误
指令解释(如果有的话)
示例:C编译器
示例:BASIC