>请考虑以下代码
public void myMethod1() {
try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (Exception e) {
throw e;
}
}
public void myMethod1_fixed() throws Exception {
try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (Exception e) {
throw e;
}
}
public void myMethod2() {
try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
} catch (Exception e) {
throw e;
}
}
myMethod1()
抱怨没有处理抛出的Exception e
,我理解这一点,因为Exception
检查异常,你被迫处理它,因此myMethod1_fixed()
throws Exception
添加,它很高兴。
现在有了myMethod2()
它也抛出了Exception e
,但即使没有throws Exception
,它也很高兴,这意味着Exception
不受控制?
如使用更具包容性的类型检查重新抛出异常中所述,编译器会考虑自 Java 7 以来捕获并重新抛出异常时可能发生的实际异常。
所以在
try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
} catch (Exception e) {
throw e;
}
您已经在上一个catch
子句中捕获了所有选中的异常,并且只能使用未选中的异常。
请注意,您不得修改变量e
才能使其正常工作。