throwステートメントへの明示的な呼び出しは、throw命令を使用してバイトコード レベルで表されます。
たとえば、以下のコード スニペット:
private static SQLException thrower() throws SQLException
{
throw new SQLException();
}
次のバイトコードに変換されます。
private static java.sql.SQLException thrower() throws java.sql.SQLException;
Signature: ()Ljava/sql/SQLException;
Code:
0: new #29; //class java/sql/SQLException
3: dup
4: invokespecial #31; //Method java/sql/SQLException."<init>":()V
7: athrow
私の質問は、バイトコードを分析するだけで、スローされた例外のタイプをどのように知ることができるでしょうか?
Obs.:ソース コードでthrowステートメントを呼び出すときに、常に新しい例外の種類をインスタンス化するとは限らないことに注意してください。したがって、新しい命令の引数の型を調べることは解決策ではありません。