なぜ(のJavaクラスファイル内の)定数プールは、1(としない0)からインデックス付けされますか?以下のために予約constant_pool [0]エントリは何ですか?

おさるの学習者:

JVM仕様(から4.1章「クラスファイル構造」)は、「constant_poolテーブルはconstant_pool_count 1からインデックス付けされる- 1」と記載されています

彼らは[0]をスキップしているとのために予約このエントリは何ですか、なぜ私は興味があります。

アンチモン:

彼らはそれはあなたが正常に定数プールのエントリを参照しますケースのために使用することができるように、インデックス0をスキップし、代わりに「何を」示すないようにしたいです。これは、NULLポインタの定数プールと同等です。

例外ハンドラ「のすべてをキャッチ」するためのインデックス0のための最も顕著な使用です。例外ハンドラはできキャッチすべてにそれを処理するために望んでいる、例外のクラス、または単に使用インデックス0のための定数プールエントリのいずれかのポイント(これは引くと同等ですjava/lang/Throwable)。実際には、コンパイラは、実装するすべての例外ハンドラをキャッチ生成されますfinallysynchronized他のものの間で、リソースをブロックし、試してみるのクリーンアップ部分。

インデックス0の他の用途は、次のとおりです。

  • のスーパークラス java/lang/Object
  • 名前のないパラメータの名前
  • 別のクラスのメンバでないクラス(つまり、最上位クラス、ローカルクラス、匿名クラス)用の外部クラス
  • 匿名クラスの内部名
  • すぐにこの方法で囲まれていないクラスについて囲む方法
  • なしバージョン情報を持つモジュールのバージョン情報
  • 依存関係のない情報を持つモジュールの依存関係

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=226822&siteId=1