5

バイトコードが次のように生成される理由

 .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/FileNotFoundException;
        }
 .end annotation

それよりも.throws Ljava/io/FileNotFoundException

throws FileNotFoundExceptionメソッドがJavaコードのヘッダーで宣言されている場合?

4

2 に答える 2

5

簡単に言えば、dex 形式には特定の「スロー」の概念がないということです。Java クラスファイルが dex 形式に変換されると、この情報を含む Throws 注釈が追加されます。

少し長い答え:

チェックされた例外の概念は、実行時ではなく、コンパイル時にのみ重要です。dalvik 仮想マシンは、メソッドがスローできる例外を認識していません。関係する限り、すべてが未チェックの例外です。チェックされた例外が throws 句で宣言されることを強制するのは、Java コンパイラです。

そのため、dex ファイルに特定の「スロー」概念を追加しても意味がありません。代わりに、その情報は、より一般的な注釈機能を使用して保存されます。

dex2jar のようなものを使用して dex ファイルを一連のクラス ファイルに変換し、その上で jasmin を使用しているようです。dex2jar が dex ファイルの Throws アノテーションをクラスファイルのException 属性に再マップしない可能性がありますが、そうであるかどうかは特に確認していません。

于 2012-12-28T00:02:34.440 に答える
1

dalvik.annotation.Throwsがメソッドに表示されます

Throwsアノテーションは、1つ以上の例外タイプをスローするように宣言された各メソッドに付加されます。

このページの下部にあります。

于 2012-12-27T23:20:38.063 に答える