Javaバイトコードには、例外ハンドラタイプとして定数プールインデックス0を指定するオプションがあり、すべての例外をキャッチできます。しかし、私が理解しているように、これはThrowableを捕まえることとまったく同じです。では、この機能の目的は何ですか?ある日、Javaの設計者は、Throwableから継承しないタイプの例外を追加することを想定していましたか?見た目は違いますが、怠惰以外の説明は思いつきません。
1 に答える
0
JVM仕様(§4.7.3)には次のように記載されています。
アイテムの値
catch_type
がゼロの場合、この例外ハンドラーはすべての例外に対して呼び出されます。これは実装に使用されますfinally
(§3.13)。
catch_type zeroの使用については、§3.13で具体的に説明されていませんがfinally
、Javaで句をコンパイルするときに使用されるというヒントが手がかりになります。JVM設計者は、クラスを具体的に参照しなくても、すべての例外タイプを参照する簡単な方法を望んでいた可能性がありますThrowable
。java/lang/Throwable
catch_type zeroを使用すると、定数プールにインデックスを付けてそこでクラス名を解決するよりも、JVMが識別しやすくなります。
実際には、catch_typeゼロまたは参照する定数プールへのインデックスはjava/lang/Throwable
同じように機能するはずです。
于 2012-07-21T04:49:50.073 に答える