程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JVM-類索引,父類索引和索引集合,jvm-類索引集合

JVM-類索引,父類索引和索引集合,jvm-類索引集合

編輯:JAVA綜合教程

JVM-類索引,父類索引和索引集合,jvm-類索引集合


   類索引,父類索引和接口索引集合

  前面介紹了class文件,從頭開始的魔數,次版本號,主版本號,常量池入口,常量池,訪問標志.那麼再接下來的就是用來確定這個類的繼承關系的類索引,父類索引和接口索引集合這三項了.

  下面就來認識一下這三項內容. 

  類索引(this_class)和父類索引(super_class)都是一個u2類型的數據,而接口索引集合(interfaces)是一組u2類型的數據的集合,class文件中由這三項數據來確定這個類的繼承關系.

  類索引用於確定這個類的全限定名,父類索引用於確定這個類的父類的全限定名.接口索引集合用來描述這個類實現了哪些接口,這些被實現的接口按implements語句後的接口順序從左到右排列在接口索引集合中.

  類索引,父類索引和接口都按順序排列在訪問標志之後,類索引和父類索引用兩個u2類型的索引值表示,它們各自指向一個類型為CONSTANT_Class_info的類描述常量,通過CONCTANT_Class_info類型的常量中的索引值可以找到定義在CONSTANT_Class_info類型的常量中的全限定名字符串.

  對接口索引集合,入口的第一項u2類型的數據為接口計數器(interface_count)表示索引表的容量.如果該類沒有實現任何接口,則該計數器值為0,後面接口的索引表不再占用任何字節.

 下面我們繼續前面分析的class文件,繼續往下走,分析上面這三項內容:

class文件及分析:

 

  那麼現在我們拿這幾個值和我們介紹常量池的時候用javap工具分析的常量池的時候查看的常量池的內容,驗證一下是否正確.

  

 

  因為0x00 03 和0x00 04十六進制對應與十進制的3和4,所以類索引和父類索引就對應第三和第四個常量池.從上圖看第三和第四個常量池分別對應TestClass和Object兩個類,再看一下源代碼,就知道結果是正確的.(因為我的類名就是TestClass,沒有顯示繼承任何類,就是默認繼承了Object父類)

  源代碼:

 

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved