3

いくつかのクラスで実行した出力を見るとjavap、次の奇妙な点に遭遇しました。

一部のクラスの定数プールには、次のようなエントリが含まれています。

#33 = Utf8               Code
#34 = Utf8               LocalVariableTable
#35 = Utf8               StackMapTable
#36 = Utf8               MethodParameters

これらの定数が定数プールに表示されるのはなぜですか?

4

1 に答える 1

2

以下の定数

#33 = Utf8               Code
#34 = Utf8               LocalVariableTable
#35 = Utf8               StackMapTable
#36 = Utf8               MethodParameters

属性の名前です。

すべての属性について、attribute_name_index は、クラスの定数プールへの有効な符号なし 16 ビット インデックスである必要があります。attribute_name_index の constant_pool エントリーは、属性の名前を表す CONSTANT_Utf8_info 構造 (§4.4.7) でなければなりません。

あなたが言及した属性には、次の機能があります。

  • 属性には、インスタンスのCode初期化メソッド、クラスまたはインターフェイスの初期化メソッドなど、Java 仮想マシンの命令とメソッドの補助情報が含まれます。
  • 属性 [...] は、LocalVariableTableデバッガーがメソッドの実行中に特定のローカル変数の値を決定するために使用できます。
  • StackMapTable属性は、型チェックによる検証のプロセス中に使用されます
  • MethodParameters属性は、名前など、メソッドの仮パラメーターに関する情報を記録します。
于 2015-05-05T20:12:05.050 に答える