如果有多个catch块,为什么在catch块中没有捕获runtimeexception?

eaf3rand  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(374)

我可以通过以下代码捕获runtimeexception或其子类:

try {
    //code that throws subclass of RuntimeException
    throw new ChildRuntimeException("try");
} catch (Exception ex) {
    System.out.println(ex.getMessage());
}

但下面的代码出现错误,无法在异常捕获块中捕获runtimeexception。

try {
    // code that throws subclass of Exception
    throw new ChildExceptionClass("try");
} catch (ChildExceptionClass ex) {
    throw new RuntimeException(ex.getMessage());
} catch (Exception ex) {
    System.out.println(ex.getMessage());
}

我搜索了相同类型的问题,但没有找到合适的答案。有人能解释为什么行为不同吗?

nbnkbykc

nbnkbykc1#

我猜你可能想做的是:

try { // code that throws subclass of Exception
        throw new ChildExceptionClass("try");
    } catch (ChildExceptionClass ex) {
      try {
            throw new RuntimeException(ex.getMessage());
       } catch (Exception ex) {
        System.out.println(ex.getMessage());
       }   
    }

你明白区别吗?

mqxuamgl

mqxuamgl2#

在第二个示例中,您抛出了一个childruntimeexception,它被捕获,但随后抛出了一个新的runtimeexception。此块没有“catch”close,因此抛出异常而不捕获。
第二个catch与“try”块相关,而不是与“catch”块相关。

相关问题