Java 在catch和finally子句中引发异常
在大学里有关Java的问题中,有以下代码片段:
class MyExc1 extends Exception {}class MyExc2 extends Exception {}
class MyExc3 extends MyExc2 {}
public class C1 {
public static void main(String[] args) throws Exception {
try {
System.out.print(1);
q();
}
catch (Exception i) {
throw new MyExc2();
}
finally {
System.out.print(2);
throw new MyExc1();
}
}
static void q() throws Exception {
try {
throw new MyExc1();
}
catch (Exception y) {
}
finally {
System.out.print(3);
throw new Exception();
}
}
}
我被要求提供其输出。我回答了13Exception in thread main MyExc2
,但是正确答案是132Exception in thread main MyExc1
。为什么会这样呢?我只是不明白MyExc2去哪了。
回答:
通过阅读你的答案并了解你可能的想法,我相信你认为“进行中的例外”具有“优先权”。记住:
当一个新的异常被抛出到一个catch块或将要传播到该块之外的finally块中时,当新的异常向外传播时,当前异常将被中止(并被遗忘)。与其他任何异常一样,新异常开始释放堆栈,退出当前块(catch或finally块),并在此过程中接受任何适用的catch或finally块。
请注意,适用的catch或finally块包括:
当在catch块中引发新异常时,新异常仍受该catch的finally块(如果有)的影响。
现在,请回溯执行过程,并记住,每当你点击时throw,都应中止跟踪当前异常并开始跟踪新异常。
以上是 Java 在catch和finally子句中引发异常 的全部内容, 来源链接: utcz.com/qa/407138.html