当前类,父类和接口
在访问标记之后紧跟着的是类的类别,父类类别和实现的接口,它的结构如下:
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
this_class和super_class指向常量池中CONSTANT_Class,表示当前的类型和父类。
Class文件的字段和方法基本结构
在接口描述后就会有类的字段信息,因为一个类有多个字段,所以要先说明字段的个数:
u2 fields_count;
field_info fields[fields_count];
field_info里存储着字段的基本信息,它的具体结构如下:
field_info{
u2 access_flags;//字段的访问标记,和之前提到的类的访问标记很像
u2 name_index;//字段名称,它是一个两字节整数,指向常量池中的CONSTANT_Utf8结构
u2 descriptor_index;//字段类型,两字节整数,指向常量池中的CONSTANT_Utf8结构
u2 attributes_count;//属性个数
attribute_info attributes[attributes_count];//存放属性信息如初始化值和注释的具体数组。
}
下面是字段的访问标记位Access Flag和含义:
在字段信息之后是类的方法信息,它和字段信息结构类似,也由两部分组成:
u2 methods_count;
method_info methods[methods_count];
method_info的结构和上面的field_info的结构类似,可以依照上面类推。访问标记也大同小异,如下图所示:
再往后就是方法的执行主体code属性了,它储存着方法的字节码等信息,下次再总结有关它的内容。