2 回答

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

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