jvm类文件的结构3-类索引、父类索引与接口索引集合

Class文件索引简介

类索引(this_class)和父类索引(super_class)都是一个u2类型的数据,而接口索引集合(interfaces)是一组u2类型的数据的集合。

Class文件中由这三项数据来确定这个类的继承关系:

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

  2. 父类索引用于确定这个类的父类的权限定名。

  3. 接口索引集合用来描述这个类实现了哪些接口,这些被实现的接口将按implements语句(如果这个类本身是一个接口,则应当是extends语句)后的接口顺序从左到右排列在接口的索引集合中。

索引的结构描述

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

类索引和父类索引

类索引和父类索引用两个u2类型的索引值表示,它们各自指向一个类型为CONSTANT_Class_info的类描述符常量,通过CONSTANT_Class_info类型的常量中的索引值可以找到定义在CONSTANT_Utf8_info类型的常量中的全限定名字符串。

1
2
索引/父类索引        常量池                           常量池
this_class ---> CONSTANT_Class_info index----> CONSTANT_Utf8_info (记录类的全限定名)

接口索引集合

接口索引集合,入口第一项————u2类型的数据为接口计数器(interfaces_count),表示索引表的容量。

如果该类没有实现任何接口,那么该计数器值为0,后面接口的索引表不再占用任何字节。