有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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) 个答案

  1. # 1 楼答案

    正如在Rethrowing Exceptions with More Inclusive Type Checking中所解释的,从Java 7开始,当捕获并重新抛出异常时,编译器会考虑可能发生的实际异常

    所以在

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

    您已经在前面的catch子句中捕获了所有选中的异常,并且只有未选中的异常是可能的

    请注意,不能修改变量e使其工作