首頁>技術>

1、類索引

類索引緊隨在類訪問標記之後,佔兩個位元組,裡面儲存一個指向常量池的一個索引,用於指出該class檔案的全限定名。

以下面這個簡單的java類為例:

package com.yang.testFlag;public class Main {}

其16進位制資料:

可以看到,類索引為0x0002,代表指向常量池的第二個常量項,而常量池內容為:

第二個常量項又指向第11個常量項,即“com/yang/testFlag/Main”字串,即這個類索引能告訴我們,該class檔案的全限定名。

2、超類索引

超類索引緊隨在類索引之後,也是佔兩個位元組,同樣儲存一個指向常量池的索引,用於指出該類的父類全限定名。

可以看到,超類索引為0x0003,找到#3,再找到#12,可以得到該類的父類為java/lang/Object,Object類是所有類的一個隱形父類。有關Object類裡面的方法,可以參考我的另外一篇文章Object類的方法簡談。

如果Main類繼承的是Thread類的話,那麼此時超類索引指向的常量池項的值為java/lang/Thread。

3、介面表索引

每一個類都只能繼承一個直接父類,卻可以實現多個介面,介面表索引則是一個指向常量池中所有介面全限定名的一個容器。

介面表索引包含介面計數以及介面索引,介面計數緊隨著超類索引,然後介面索引緊隨著介面計數。

以下面的程式碼為例:

package com.yang.testFlag;import java.io.Serializable;public class Main implements Runnable, Serializable {    @Override    public void run() {            }}

可以看到介面計數為0x0002,也就是有兩個介面。第2個介面的索引為0x0004,第2個介面的索引為0x0005。

由常量池,我們可以看到介面表索引內的兩個介面的全限定名分別為java/lang/Runnable以及java/io/Serializable。

14
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • C語言 | 輸出楊輝三角