欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA字节码文件之第二篇(常量池)

程序员文章站 2022-06-23 22:31:06
Access Flags 占2个字节,所以该字节码文件的访问标志是00 21,0x0021在 Access Flags 中是0x0020和0x0001的并集,表示 ACC PUBLIC与 ACC SUPER合并的结果。说明该类的声明修饰是public并且继承Object ......

一、access flags 访问标志

访问标志信息包括该 class 文件是类还是接口,是否被定义成 public 或者 abstract , 如果是类,是否被声明成 final。

访问标志表

JAVA字节码文件之第二篇(常量池)

二、access flags 的分析

JAVA字节码文件之第二篇(常量池)

 通过上一篇java字节码文件之第二篇(常量池)的分析可知该class文件的常量池结束部分在 63 74的位置

JAVA字节码文件之第二篇(常量池)

 access flags 占2个字节,所以该字节码文件的访问标志是00 21,0x0021在 access flags 中是0x0020和0x0001的并集,表示 acc public与 acc super合并的结果。说明该类的声明修饰是public并且继承object

三、this class name 的分析

this class name 占 access flags之后的两个字节所以是00 03。索引等于3,对应常量池中的#22 ,就是当前类的名称

JAVA字节码文件之第二篇(常量池)

 四、super class name 的分析

super class name占 this class name 之后的两个字节所以是 00 04。索引等于4,对应常量池中的#4,就是当前类的父类

 JAVA字节码文件之第二篇(常量池)

 五、interface 的分析

interface 占super class name 之后的 2+n个byte,前两个byte是接口的数量,之后的n个byte表示接口的具体信息。

由于 interface num=00 00 ;所以该类没有实现任何接口,也就是没有索引与常量池进行匹配。

六、fields 的分析

fields的范围:字段表用于描述类和接口中声明的变量。这里的字段包含了类级别变量(静态变量)以及实例变量,但是不包括方法内部声明的局部变量

属性表集合:

JAVA字节码文件之第二篇(常量池)

fields 占 interface 之后的2+n个byte,前两个byte是fields 的数量,之后的n个byte表示fields的具体信息。

由于 fields num= 00 01;所以该类具有一个成员变量。

u2 access_flags :00 02 ,访问标识的是0002,acc_private

u2 name_index: 00 05,名字的索引是5,对应常量池的#5

JAVA字节码文件之第二篇(常量池)

u2 descriptor_index :00 06,描述符的索引是6,对应常量池的#6 ,所以变量的类型是int

JAVA字节码文件之第二篇(常量池)

u2 attributes_count:00 00 ,扩展属性为0,所以该变量没有扩展属性,所以就不存在 attribute_info 

attribute_info attributes[attributes_count];