对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语句时,并不总是实例化一个新的异常类型。因此,查看新指令的参数类型不是解决方案。