这一次,彻底弄懂 Java 字节码文件!(12)

第一个是access_flags访问标志符 , 如public、private、protected、final、abstract等等 。 第二个name_index和第三个descriptor_index两个构成一个字段结构的完整信息 。 attributes_count是字段的独有的信息 , 如果值是0 , 后面的attributes也就不存在了 。 具体结构示例: 当前类字段对应的十六进制如下所示: field_info{ u2access_flags;0002 u2name_index;0005 u2descriptor_index;0006 u2attributes_counts;0000 attribute_infoattributes[attributes_count
;

0x0002在访问标志结构表中对应的是ACC_PRIVATE 。

名称索引 0x0005 与 描述符索引 0x0006 转换为十六进制为 5 和 6 , 从 常量池结构表中查找结果: #5=Utf8a #6=Utf8I

附加属性的数量为0x0000 , 转换为十进制为0 , 后面的附加属性attributes也就不会出现了 。

4.6 方法表 00 03 //methods_count 00 01 //access_flags 00 07 //name_index 00 08 //descriptor_index 00 01 //attributes_count 00 09 //attribute_name_index 00 00 00 38 //attribute_length 00 02 //附加属性的max_stacks 00 01 //附加属性的max_locals 00 00 00 0 A //附加属性的code_length 2 AB7 00 01 2 A 04 B5 00 02 B1 //code_lengthc长度的字节 , 具体执行的字节码指令 00 00 00 02 00 0 A 00 00 00 0 A 00 02 00 00 00 06 00 04 00 08 00 0B 00 00 00 0 C 00 01 00 00 00 0 A 00 0 C 00 0 D 00 00 00 01 00 0 E 00 0F 00 01 00 09 00 00 00 2F 00 01 00 01 00 00 00 05 2 AB4 00 02 AC 00 00 00 02 00 0 A 00 00 00 06 00 01 00 00 00 0B 00 0B 00 00 00 0 C 00 01 00 00 00 05 00 0 C 00 0 D 00 00 00 01 00 10 00 11 00 01 00 09 00 00 00 3 E 00 02 00 02 00 00 00 06 2 A 1B B5 00 02 B1 00 00 00 02 00 0 A 00 00 00 0 A 00 02 00 00 00 0F 00 05 00 10 00 0B 00 00 00 16 00 02 00 00 00 06 00 0 C 00 0 D 00 00 00 00 00 06 00 05 00 06 00 01 00 01 00 12 00 00 00 02 00 13 Methods 方法包括两部分 , 第一个是methods_count(方法个数) , 第二部分methods(方法名) 。 当前这个类对应的十六进制:00 03转换为十进制值为3 , 说明这个类内部有三个方法 。 三个方法为: setA()、getA() , 以及默认无参的构造方法 。 方法表结构:

推荐阅读