JVM虚拟机---(9)Class文件结构之类索引、父类索引与接口索引集合

类索引(this_class)和父类索引(super_class)都是一个u2类型的数据,而接口索引集合(interfaces)是一组u2类型的数据的集合,Class文件中由这三项数据来确定这个类的继承关系。

 

  1. 类索引

类索引用于确定这个类的全限定名。

  1. 父类索引

父类索引用于确定这个类的父类的全限定名。

由于Java语言不允许多重继承,所以父类索引只有一个,除了java.lang.Object之外。

所有的java都有父类,除了java.lang.Object之外,所有的Java类的父类索引都不为0。

  1. 接口索引集合

       接口索引集合就是用来描述这个类实现了哪些接口,这些被实现接口将按implements语句(如果这个类本身是一个接口,则应当时extends语句)后的接口顺序从左到右排列在接口索引集合中,如果该类没有实现任何接口,则计数器为0。

 

类索引、父类索引和接口索引集合都按顺序排列在访问标志之后,类索引和父类索引用

两个u2类型的索引值表示,它们各自指向一个类型为CONSTANT_Class_info的类描述符常

量,通过CONSTANT_Class_info类型的常量中的索引值可以找到定义在

CONSTANT_Utf8_info类型的常量中的全限定名字符串。

案例

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";

}

编译成class文件,使用UltraEdit打开,可以得到Java编译后的字节码

       由此可以得知类索引为0x0011(对应的十进制值为17),父类索引是0x0012(对应的十进制值为18),接口索引0x0000(对应的十进制值为0,则就是没有)。

类索引和父类索引对应了第17和第18个常量池,得出类是TestConstant,父类是Object,(没有显式继承任何类,默认是继承Object父类)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值