下面就來認識一下這三項內容.
類索引(this_class)和父類索引(super_class)都是一個u2類型的數據,而接口索引集合(interfaces)是一組u2類型的數據的集合,class文件中由這三項數據來確定這個類的繼承關系.
類索引用於確定這個類的全限定名,父類索引用於確定這個類的父類的全限定名.接口索引集合用來描述這個類實現了哪些接口,這些被實現的接口按implements語句後的接口順序從左到右排列在接口索引集合中.
類索引,父類索引和接口都按順序排列在訪問標志之後,類索引和父類索引用兩個u2類型的索引值表示,它們各自指向一個類型為CONSTANT_Class_info的類描述常量,通過CONCTANT_Class_info類型的常量中的索引值可以找到定義在CONSTANT_Class_info類型的常量中的全限定名字符串.
對接口索引集合,入口的第一項u2類型的數據為接口計數器(interface_count)表示索引表的容量.如果該類沒有實現任何接口,則該計數器值為0,後面接口的索引表不再占用任何字節.
class文件及分析:
那麼現在我們拿這幾個值和我們介紹常量池的時候用javap工具分析的常量池的時候查看的常量池的內容,驗證一下是否正確.
因為0x00 03 和0x00 04十六進制對應與十進制的3和4,所以類索引和父類索引就對應第三和第四個常量池.從上圖看第三和第四個常量池分別對應TestClass和Object兩個類,再看一下源代碼,就知道結果是正確的.(因為我的類名就是TestClass,沒有顯示繼承任何類,就是默認繼承了Object父類)
源代碼: