首页 > Java > java教程 > 正文

为什么在这个 Java 异常处理示例中'MyExc2”异常消失了?

Susan Sarandon
发布: 2024-10-30 10:08:02
原创
405 人浏览过

Why Does the `MyExc2` Exception Disappear in This Java Exception Handling Example?

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 块中引发异常时,它会对流程产生重大影响。下面是细分:

  • catch 块中的异常: 如果在 catch 块中抛出新异常(如上面的 throw new MyExc2() 所示),则原始异常为“中止了。”当前的执行路径不完整,新的异常将接替向外传播的异常。
  • finally 块中的异常: 类似地,如果在一个finally块,原来的异常也被中止。不过,有一个关键点需要注意:

    • Catch 块的finally 块: 如果新的异常是在catch 块的finally 块中抛出的,它仍然会受到该catch 块的约束。 finally 块,如果有的话。

跟踪异常

根据这些原则跟踪执行,我们可以看到:

  1. main 中的 try 块打印“1”并调用 q()。
  2. 在 q() 内部,try 块抛出 MyExc1。
  3. catch 块in q() 默默地处理异常。
  4. q() 中的 finally 块打印“3”并抛出异常。
  5. main 中的 Catch 块:

    • MyExc2 被抛出到这个块中,中止原来的 MyExc1。
    • 但是,catch 块有一个仍然执行的 finally 块。
  6. 最后在 main 中的块:

    • MyExc1 被抛出到这个块中,中止 MyExc2。

因此,正确的输出是“132Exception in thread main MyExc1”。 MyExc2 异常被“遗忘”,因为在处理 MyExc2 的 catch 块的 finally 块中抛出了一个新异常 (MyExc1)。

以上是为什么在这个 Java 异常处理示例中'MyExc2”异常消失了?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!