JVM虚拟机---(10)Class文件结构之字段表集合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq1021979964/article/details/97129322

字段表集合

字段表集合是指由若干个字段表组成的集合。

字段表(field_info)用于描述接口或者类中声明的变量,字段(field)包括类级变量以及实例级变量,但不包括在方法内部声明的局部变量。

1.包含的信息

  1. 字段的作用域(public、private、protected修饰符)。
  2. 是实例变量还是类变量(static修饰符)。
  3. 可变性(final)。
  4. 并发可见性(volatile修饰符,是否强制从主内存读写)。
  5. 可否被序列化(transient修饰符)。
  6. 字段数据类型(基本类型、对象、数组)。
  7. 字段名称

上述信息中,各个修饰符都是布尔值,要么有某个修饰符,要么没有,适合用标志位表示。字段名称,类型是无法固定的,只能用常量池中的常量来描述。

2.字段表结构(field_info)组成

访问标志(access_flags)、名称索引(name_index)、描述索引(descriptor_index)、属性表集合

3.案例

public class TestConstant {
    private final int a = 10;
    private final int b = 10;
    private int c = 11;
    private int d = 11;
    private long e = -11111110005514L;
    private long f = -11111110005514L;
    private double g = 10.4557848D;
    private double h = 10.4557848D;
    private String y = "JVM";
    private String j = "JVM";
}

紧接着接口索引之后的是字段表集合

字段数量:0x000A(对应的十进制值为10),字段数量为10个。

4.字段表集合案例

由此可以得知

  1. 字段访问标志:0x0012 = (0x0002+0x00010),字段的修饰符是private+final。
  2. 字段名称:0x0013(对应的十进制为19),指向常量池的19,字段名称为a。
  3. 字段数据类型:0x0014(对应的十进制为20),指向常量池的20,对应的类型为int。
  4. 属性表计数器:0x0001(对应的十进制为1),对应属性表有1个。
  5. 属性表名称索引:0x0015(对应的十进制为21),指向常量池的21,ConstantValue。
  6. 属性长度:0x0002,因此该属性的的ConstantValue类型,固定值为2.
  7. 常量值索引:0x0016(对应的十进制为22),指向常量池的22,对应的字段值为10。

依次类推

猜你喜欢

转载自blog.csdn.net/qq1021979964/article/details/97129322
今日推荐