JVM学习笔记 - 解读Class文件(二)

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 00Minor version ) : 次版本号,也叫小版本号

00 34Major 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值