Java字节码

到.class文件目录下

javap -c ClassName   粗略信息

javap -v ClassName   详细信息 (或javap -verbose)

javap -p ClassName Java官方的反编译版本,更为齐全一些

如看enum的实现:

IDEA的反编译内容(反编译的.class一般都在out/production目录下):

javap -p Solution

使用javap -p明显比IDEA多了很多内容,甚至可以看到定义为enum类型的类其实是继承了Enum类,且为final的。包括内部实现都有,很是方便。

BTW,.java ——> .class称为编译的过程,平时我们打开.class也能够看到里面的内容,为什么还叫反编译出来的.class呢,这不就是编译出来的.class?

错误,真正的.class文件是字节码,是以一个字节即8bit为基本单位的数据流,原始的class文件打开后应该是一片八进制数据流(或者叫Byte),而我们平时打开的.class确是可读的,这是因为它们不是原始的.class,是经过各种Decompiler反编译原始的字节流,class文件得到的.java文件,只是为了逻辑上的共通——这些内容就是.class代表的东西,才叫的.class。

我们知道从用户自己编写的.java到真正的.class数据流其实JVM还要做很多工作,添加默认构造器,脱去语法糖,编译优化等等,即.class文件比我们写的原始.java文件多了很多东西。现在从这一份多了东西的字节流文件恢复成.java文件,不同的Decompiler有不同的实现,所以展现的细节也有有所不同。

一般而言,IDEA等IDE提供的反编译插件提供的细节就够用了,如果不够,可以尝试javap -p className试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值