• (十六)字段表集合


    一、概念

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

    字段访问标志图:

     常量池图:

    标识符含义表:

  • 相关阅读:
    临时表的问题
    List集合和Set集合互转
    mysql数据库事件
    mysql存储过程事务
    N皇后问题
    递归实现字符数组的全排列及组合
    判断一个序列是否为某二叉搜索树的后续遍历结果
    递归实现两个有序链表的合并
    递归实现字符串反转
    根据字节数截取字符串
  • 原文地址:https://www.cnblogs.com/shyroke/p/9032134.html
Copyright © 2020-2023  润新知