请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于javac编译的问题

https://img1.sycdn.imooc.com/szimg/5ea1b174090c035c06430103.jpg

图1

问题1:不是说.class文件是存储java文件翻译成的二进制字节码么?

https://img1.sycdn.imooc.com/szimg/5ea1b1fa093c3ad503630096.jpg

图2

我理解的二进制应该是这样的

https://img1.sycdn.imooc.com/szimg/5ea1b24109ad551009740451.jpg

问题2:javap -c的说明是反汇编,意思是图1是编译成的汇编语言么?

正在回答

1回答

翔仔 2020-04-24 11:53:24

同学好,

1.字节码文件(Java中是16进制文件)是经过编译器预处理过的一种文件,是Java的执行文件存在形式,但是文件本身是二进制文件(不是里面的内容,是整个文件),而这个二进制文件是不可以被系统直接执行的,而是需要虚拟机解释执行。

2、不能这样反推,因为会经由jvm自带的工具对文件进行解析,转换成源码,编译和反汇编的异同主要看编译器和反汇编器,因为是他们直接在处理源代码或者二进制的

0 回复 有任何疑惑可以回复我~
  • 提问者 莨菽菽 #1
    老师好,
    1.字节码文件(Java中是16进制文件),但是文件本身是二进制存储。这个不好理解,是字节码里的内容是16进制,但是文件本身存储在计算机都是二进制么?
    2.编译和反汇编是一个相反的过程,高级语言和机器语言的互相转换,并不是字面理解反汇编就是转换成汇编语言,是这么理解么?
    回复 有任何疑惑可以回复我~ 2020-04-24 16:09:12
  • 翔仔 回复 提问者 莨菽菽 #2
    同学好,问题1,确实是的,文件本身是二进制文件,而里面的文字也就是内容,是被编码成16进制了。
    问题2,这里的汇编并不是我们所谓的底层操作系统的汇编语言。如果说汇编指令属于底层操作系统指令,那么Java字节码指令属于Java虚拟机的指令,所以我们看到的可读的方式只是解释JVM如何看待这些字节码的含义
    回复 有任何疑惑可以回复我~ 2020-04-25 02:09:06
  • 提问者 莨菽菽 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-04-25 12:53:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信