(十六)字段表集合

一、概念

类索引之后便是字段表集合,如下标,紧跟类索引之后的是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”.如果字段类型是数组时,标识符以“[”开头。

字段访问标志图:

 常量池图:

标识符含义表:

原文地址:https://www.cnblogs.com/shyroke/p/9032134.html