2 回答

TA貢獻1797條經(jīng)驗 獲得超6個贊
他們跳過索引 0,以便它可以用于您通常引用常量池條目但想要指示“無”的情況。它是相當于空指針的常量池。
索引 0 最顯著的用途是用于“捕獲所有”異常處理程序。異常處理程序可以指向它要處理的異常類的常量池條目,或者只使用索引 0 來捕獲所有內(nèi)容(這等同于 catching java/lang/Throwable
)。在實踐中,編譯器將生成捕獲所有異常處理程序以實現(xiàn)finally
、synchronized
塊和 try 與資源的清理部分,等等。
索引 0 的其他用途包括:
的超類
java/lang/Object
沒有名稱的參數(shù)的名稱
不是另一個類成員的類的外部類(即頂級類、本地類和匿名類)
匿名類的內(nèi)部名稱
未立即包含在方法中的類的封閉方法
沒有版本信息的模塊的版本信息
沒有依賴信息的模塊的依賴

TA貢獻1875條經(jīng)驗 獲得超5個贊
沒有保留條目?!癧I]indexed from 1”表示常量池中的第一個條目對應于索引 1,因此沒有任何 constant_pool[0]。相反,有一個保留索引0,可以確定它不是常量池中的有效索引。
該保留索引的記錄用途似乎很少見,但至少第 4.7.24 節(jié)指定了一種用途:方法參數(shù)的名稱由常量池中的索引表示,對于未命名的參數(shù),該索引為 0。
另請注意,該名稱constant_pool_count
具有誤導性。constant_pool_count - 1
規(guī)范明確指出常量池中只有條目(請參閱第 4.1 節(jié)頂部的結構聲明,并與其他一些成員進行比較)。
添加回答
舉報