Java 如果有多个catch块,为什么在catch块中不捕获RuntimeException?
我能够通过以下代码捕获RuntimeException或其子类:Java 如果有多个catch块,为什么在catch块中不捕获RuntimeException?,java,exception,try-catch,Java,Exception,Try Catch,我能够通过以下代码捕获RuntimeException或其子类: try { //code that throws subclass of RuntimeException throw new ChildRuntimeException("try"); } catch (Exception ex) { System.out.println(ex.getMessage()); } 但我在下面的代码中遇到错误,无法在异常捕获块中捕获RuntimeExce
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());
}
我搜索了相同类型的问题,但没有找到合适的答案。可以
有人解释为什么行为不同吗?在第二个示例中,您抛出了一个childRuntimeException,它被捕获,但随后抛出了一个新的runtimeException。此块没有“catch”子句,因此会抛出异常而不会捕获
第二个catch与“try”块相关,而与“catch”块无关。我猜您可能想做的是:
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());
}
}
你明白其中的区别吗?但是我们也可以用catch(Exception ex)块捕获RuntimeException,那么为什么它没有被捕获,你能解释一下或者给出任何你想给出的例子吗?不,我只是想理解为什么第二个代码不起作用,因为根据我的理解,我们可以在catch块中捕获RuntimeException,但不能在多个catch块中同时发生。第二个catch块是多个catch块的一部分,将仅在第一个未使用的情况下使用。这是否意味着我无法捕获任何异常,如果它是从catch块抛出的,并且应该使用另一个父try/catch块或调用方方法try/catch捕获它。我不确定这是什么意思。我可以说的是,使用多个catch块的工作方式是这样的:如果从“try”块抛出异常,则第一个catch块将尝试使用。如果捕获到异常,则不会使用其他catch块(即使会从catch块抛出rexception)。如果未捕获异常,则第二个catch块将被触发以供使用,依此类推。希望现在清楚了。