一、概念
类索引之后便是字段表集合,如下标,紧跟类索引之后的是fields_count(字段数量)和fileds字段表,各占两个字节。
二、案例
- 编写一个类,该类有多个字段。如下代码:
public class Test { private int a; public byte b; public static Object obj; public Object[] objs; }
- 编译后,打开字节码文件如下图:
- 由上图可知,fields_count(字段数量)=0x0004 = 4 表示该类有4个字段。
- 紧跟fields_count后是每个字段的字段表,每个字段的字段表如下图,紧跟fields_count的也就是access_flags(字段的访问标志符)=0x0002,对比下图(字段访问标志图)可知该字段的权限为private
- 接着是name_index(字段名称)=0x0004=4,用javap查看常量池下图(常量池图)可知#4=a ,表示该字段的名称为“a”
- 接着是descriptor_index(字段类型)=0x0005=5,查看查看常量池下图(常量池图)可知#5=I,查看下图标识符含义表可知I代表"int",
- 该字段最后是属性表数量=0x0000=0,所以为空。
- 到此为止可知第一个字段的结构为:private int a;
- 接下来的字段 public byte b; public static Object obj; public Object[] objs; 解析步骤如上,值得注意的是,字段类型为对象时,标识符为“L”开头,如 public static Object obj,其字段类型的标识符为“Ljava/lang/Object”.如果字段类型是数组时,标识符以“[”开头。
字段访问标志图:
常量池图:
标识符含义表: