Catch 和 Final 子句中的异常处理
在 Java 中处理异常处理时,掌握 catch 和 finally 子句之间的相互作用至关重要。考虑以下为大学作业提供的示例:
<code class="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(); } } }</code>
要求此代码输出的问题。虽然有些人可能回答“13Exception in thread main MyExc2”,但正确答案是“132Exception in thread main MyExc1”。
为什么 MyExc2 消失
理解的关键正确的输出在于catch 和finally 子句的行为。当 catch 或 finally 块中引发异常时,它会对流程产生重大影响。下面是细分:
finally 块中的异常: 类似地,如果在一个finally块,原来的异常也被中止。不过,有一个关键点需要注意:
跟踪异常
根据这些原则跟踪执行,我们可以看到:
main 中的 Catch 块:
最后在 main 中的块:
因此,正确的输出是“132Exception in thread main MyExc1”。 MyExc2 异常被“遗忘”,因为在处理 MyExc2 的 catch 块的 finally 块中抛出了一个新异常 (MyExc1)。
以上是为什么在这个 Java 异常处理示例中'MyExc2”异常消失了?的详细内容。更多信息请关注PHP中文网其他相关文章!