5 类索引、父类索引与接口索引集合

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

限定类名,就是类名全称,带包路径的用点隔开,例如: java.lang.String。 非限定(non-qualified)类名也叫短名,就是我们平时说的类名,不带包的,例如:String。 非限定类名是相对于限定类名来说的,在Java中有很多类,不同的类之间会存在相同的函数或者方法,所以有时候就需要限定类名来调包。 而如果不存在相同的函数或者方法 ,就可以使用非限定(non-qualified)类名。

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

由于Java语言不允许多重继承,父类索引只有一个,除了java.lang.Object之外,所有的Java类都有父类,因此除了java.lang.Objec外,所有的Java类的父类索引都不为0

接口索引集合就用来描述这个类实现了哪些接口,这些被实现的接口将按implements语句后的接口顺序从左到右排列在接口索引集合中。

类索引、父类索引和接口索引集合都按顺序排列在访问标志之后,类索引和父类索引用两个u1类型的索引值表示,它们各自指向一个类型为CONSTANT_Class_info的类描述符常量,通过CONSTANT_Class_info类型的常量中的索引值可以找到定义在CONSTANT_Utf8_info类型的常量中的全限定名字符串。

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