Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javap-c对类文件做了什么?_Java_Javac_Javap - Fatal编程技术网

javap-c对类文件做了什么?

javap-c对类文件做了什么?,java,javac,javap,Java,Javac,Javap,事实上,这个问题要宽泛一点。 我知道javac将java文件编译成字节码,一个类文件。所以,类文件应该包含jvm指令和所有这些。另一方面,查看这些指令的唯一方法是使用javap-c反编译类文件。但它不是反编译,对吗?因为如果它是反编译的,它将生成java文件。所以,我猜javac会编译java文件2次(实际上不是这样,但为了简单起见,让我们假设是这样),首先编译到jvm指令,然后是字节码,所以javap-c会从字节码反编译到jvm指令。Jvm应该理解字节码,因此它不能理解指令。我有点困惑。有人能

事实上,这个问题要宽泛一点。
我知道javac将java文件编译成字节码,一个类文件。所以,类文件应该包含jvm指令和所有这些。另一方面,查看这些指令的唯一方法是使用javap-c反编译类文件。但它不是反编译,对吗?因为如果它是反编译的,它将生成java文件。所以,我猜javac会编译java文件2次(实际上不是这样,但为了简单起见,让我们假设是这样),首先编译到jvm指令,然后是字节码,所以javap-c会从字节码反编译到jvm指令。Jvm应该理解字节码,因此它不能理解指令。我有点困惑。有人能解释一下这里发生了什么吗?

Javap不是反编译字节码,而是反汇编字节码。为了解释这种差异,我们可以将术语换成另一种方式:编译是将人类可读的代码转换为字节码,而汇编是将汇编指令转换为字节码。

javap
显示人类可读的JVM指令形式。JVM指令是JVM的代码。
javap
显示的是汇编语言


如果您想以更可读的形式查看字节码,请使用java反编译器,例如。jad有几个UI包装器,包括Eclipse插件

为什么JVM需要汇编语言?我的意思是,JVM没有正式的汇编程序,所以从这个角度来看,没有人会用汇编语言为JVM编写程序。@gasan:JVM需要汇编语言,因为人们谈论诸如
iload
ifeq
之类的指令,而不是
0x15
0x99
,是很有用的。在我看来,文档提供了足够的信息?它对类文件没有任何作用。它读取并将字节码转储为文本。@PeterLawrey为文本。。是源代码还是jvm的汇编语言?