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

具体含义类似于上述的字段表结构 。 access_flags 对应的十六进制:00 01 在标志结构表中查找为ACC_PUBLIC 。 name_index名称索引对应十六进制 00 07 descriptor_index描述符索引对应十六进制 00 08 分别转换为十进制为 7 和 8 , 在常量池中查找结果: #7 =Utf8init //表示这个类的构造方法 #8 =Utf8()V //表示不接收任何参数的不返回结果的描述符

attributes_count对应十六进制:00 01 , 其个数为1 , 表示会有一个附加属性 。 也说明了有一个attributes 。

方法的属性结构构成: 方法中的每一个属性都是一个atrribute_info结构 。 atrribute_info { u2 atrribute_name_index; u4 attribute_length; u1 info [atrribute_length
;

attribute_name_index对应十六进制为 00 09 , 在常量池结构表中查找结果:

#9=Utf8Code

从字节码中每一个方法中都能体现出来 , 比如默认构造方法:

public com .dskj .jvm .bytecode .MyTest1 (); descriptor :() V flags : ACC_PUBLIC Code : ...

然后根据 atrribute_length 对应十六进制为 00 00 00 38 转换为十进制为3 * 16的一次方 + 8 = 56

推荐阅读