在 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不受控制?

如使用更具包容性的类型检查重新抛出异常中所述,编译器会考虑自 Java 7 以来捕获并重新抛出异常时可能发生的实际异常。

所以在

try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
} catch (Exception e) {
throw e;
}

您已经在上一个catch子句中捕获了所有选中的异常,并且只能使用未选中的异常。

请注意,您不得修改变量e才能使其正常工作。

相关内容

  • 没有找到相关文章

最新更新