【问题标题】:How to catch an exception that was thrown inside a catch clause?如何捕获在 catch 子句中引发的异常?
【发布时间】:2015-06-12 17:21:43
【问题描述】:
try {

        throw new SomeException();

    }

    catch (SomeException e) {

        System.out.println("reached once");
        throw e;
    }

    catch (Exception e) {
        System.out.println("reached twice");
    }

即使在第一个 catch 子句中再次抛出异常,此代码也只显示“到达一次”。如何解决这个问题以便同时执行两个 catch 子句?

PS:上面的代码是我遇到的一个普遍问题,我不得不将它应用到一个更大的代码中,其中包含大约 5 或 6 个捕获不同异常的 catch 子句,但最终,在循环中的某个点我需要再次抛出异常。

【问题讨论】:

  • 把这个try-catch包装在另一个 try-catch中。
  • 不要这样做。几十年来,“Log-and-throw”一直被认为是一种反模式。

标签: java exception try-catch finally clause


【解决方案1】:

只需在 catch 中添加另一个 try catch。

try {
    try {

        throw new NullPointerException();

    } catch (NullPointerException e) {
        System.out.println("reached once");

        throw e;
    }
} catch (SomeOtherException ex) {}

【讨论】:

  • 不知道你为什么被否决,这正是我需要的。谢谢。
【解决方案2】:

你必须用 try/catch 块来包围所有可以抛出 Exception 的代码

    try {

            throw new NullPointerException();
        }
        catch (NullPointerException e) {
            System.out.println("reached once");
            try{
                throw e;
            }
            catch (Exception ex) {
                System.out.println("reached twice");
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2019-12-17
    • 2012-02-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多