一、方法表
方法表结构如下图所示:
和字段表类似,依次包含访问标志(access_flags)、名称索引(name_index)、描述符索引(descriptor_index)、属性表集合(attributes)几项。
因为volatile关键字和transient关键字不能修饰方法,所以方法表中的访问标志没有这两个。与之相对的,synchronized、native、strictfp和abstract关键字可以修饰方法,方法表标志位取值如下:
继续通过Class类文件的结构(二)字段表集合中的示例来看
常量池中的对应关系:
通过上面两个图可知,该类共有两个方法(一个是类的默认构造方法init,还有一个是int型的inc方法)
这里可以看到第一个方法(init默认构造方法)的访问标志是0x0001,也就是public,简单名称为 < init> ,描述符是()V,也就是void。
跟在方法描述符后面的就是属性表的计数器,代表属性表中有几个属性。
属性计数器为0x0001说明属性表中有一项属性
属性名称索引为0x0009,对应常量池中的code,说明此属性是方法的字节码描述。
Code,代码,顾名思义就是存储方法中的代码,Java代码经过编译器编译成字节码指令之后,存放在Code属