考虑下面的代码是否检查了异常或不在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
未选中?
编译器知道任何检查的异常都会在前一个块中被捕获,因此它必须是'RuntimeException'。 – shmosel
哇,这很快。谢谢你带着答案向我指出另一个问题。所以我对定义checked和unchecked异常的理解仍然是正确的,只是从JAVA 7开始,编译器足够聪明,可以识别真正的异常类型。但无论如何,没有必要否定。 – user1589188