zoukankan      html  css  js  c++  java
  • (十六)字段表集合

    一、概念

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

    字段访问标志图:

     常量池图:

    标识符含义表:

  • 相关阅读:
    开放GIS标准OGC之路(4)之 解密Filter(摘抄)
    在WCF中使用async/await 关键字的简化的异步编程模型(译)
    WinCE仿真器设置
    oracle PL/SQL编程详解
    oracle 日期格式
    钢笔工具使用教程
    使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明
    利用bitmap将图片部分颜色透明
    PS圆角图片并保留透明背景
    Script Debugger的使用
  • 原文地址:https://www.cnblogs.com/shyroke/p/9032134.html
Copyright © 2011-2022 走看看