在JAVA中是否检查异常?
考虑下面的代码
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
被取消选中了
# 1 楼答案
正如在Rethrowing Exceptions with More Inclusive Type Checking中所解释的,从Java 7开始,当捕获并重新抛出异常时,编译器会考虑可能发生的实际异常
所以在
您已经在前面的
catch
子句中捕获了所有选中的异常,并且只有未选中的异常是可能的请注意,不能修改变量
e
使其工作