1、查看Class文件工具
class 字节码文件查看工具:
BinEd:IDEA插件(推荐)
Sublime:或其他工具
class 格式化详情工具:
JClassLib:IDEA插件(推荐)
Javap:jdk自带(javap -v class文件)
当然有很多种查看的工具,个人喜好看就好了,但是推荐使用 IDEA 插件,毕竟方便点
安装后,新建一个 java 文件,build 成 class 文件 后面需要用到这个哦!
2、BinEd 插件安装
在 IDEA 搜索该插件下载
安装好之后在 IDEA 中打开 File -> Open As Binary... ,然后选择你的 class 文件,一定要是class文件
然后右侧就能看到一串编码,选择 Hexadecimal 类型(16进制)
3、解读
为了更加直观的查看,我们看下图
咋们按照顺序来解读这一串编码
CA FE BA BA ( Magic ) : 这一串的意思是告诉我们这是一个 class 文件,用于校验
00 00 ( Minor version ) : 次版本号,也叫小版本号
00 34 ( Major version ) : 主版本号,也叫大版本号,计算一下 3*16^1+3*16^0=52,52 对应 1.8
00 10 (Constant_pool_count) : 常量大小,长度为 Constant_pool_count - 1
具体常量信息 ( Constant_pool ) : 这里会存很多常量信息,各个常量会互相指向。详细查看底部
然后还存放了这些信息(了解即可):
访问标识符 (Access_flages) : 访问标识符, 这里通过位计算达到 & ,详情查看底部
当前类 (This_class) : 当前类指向常量的内容
超类 (Super_class) : 超类指向常量的内容
接口数 (InterFaces Count)
字段数 (Fields count)
方法数 (Methods count)
属性数 (Attributes counts)
JClassLib 安装
在 IDEA 搜索该插件下载
安装完成后,鼠标移动到需要查看的 类 中,再点击 view - Show Bytecode With Jclasslib
然后我们就能看到 插件 已经把 class 文件格式化了
上图我们就能看到上面我们讲过的数据了! ~~~ 咋们来对一下 ~~~
次版本号:00 对应 0
主版本号:32 计算之后对应10进制对应 52[1.8]
常量池计数器:00 10 计算之后对应10进制对应 16 实际上只有 15 哦,上面有介绍
访问标准:0x0021 = 0x0001 & 0x0010 (0x0010 这些对应的东西可在底部查看)
本类索引:这里会指向常量池、地址
父类索引:同上
......
常量池信息
这里可以看到 常量池计数器 中15个常量
咋们可以看到对应的类名、描述
接口、字段、方法、属性它们都会在常量池中有指向,你可以慢慢改你新建的类并查看内容
<init> 初始化
OV :viod --- 更多可查看 oracle 管网文档
Access_flages 访问标识符
ACC_PUBLIC 0x0001是否为pubic类型
ACC_FINAL 0x0010是否为final
ACC_SUPER 0x0020该标准必须为真
ACC_INTERFACE 0x0200 是否为接口
ACC_ABSTACT 0x0400 接口或抽象类
ACC_SYNTHETIC Ox1000编译器自动生成,非用户代码产生
ACC_ANNOTATION 0x2000
ACC_ENUM 0x4000
常量池信息
01 CONSTANT_Uft8_info
03 CONSTANT_Integer_info
04 CONSTANT_Float_info
05 CONSTANT_Long_info
06 CONSTANT_Double_info
07 CONSTANT_Class_info
08 CONSTANT_String_info
09 CONSTANT_Fieldref_info
10 CONSTANT_Methodref_info
11 CoNSTANT_InterfaceMethodref_info
12 CONSTANT_NameAndType_info
15 CONSTANT_MethodHandle_info
16 CONSTANT_MethodType_info
18 CONSTANT_InvokeDynamic_info