【问题标题】:Java Try-Catch confusion [duplicate]Java Try-Catch 混淆[重复]
【发布时间】:2018-09-25 21:15:13
【问题描述】:

我正在准备OCA 考试,在解决有关Java 异常的主题时发现了一个冲突点。这是引起我困惑的代码:

public class StringOps {
    public static void main(String[] args) {
        System.out.print("a");
        try {
            System.out.print("b");
            throw new IllegalArgumentException();
        } catch (IllegalArgumentException e) {
            System.out.print("c");
            throw new RuntimeException("1");
        } catch (RuntimeException e) {
            System.out.print("d");
            throw new RuntimeException("2");
        } finally {
            System.out.print("e");
            throw new RuntimeException("3");
        }
    }
}

此代码输出: a-> b -> c -> e

但我不明白为什么?我以为它会输出: a-> b -> c -> d -> e

任何帮助将不胜感激!

【问题讨论】:

    标签: java exception try-catch


    【解决方案1】:

    发生这种情况是因为即使您在第一个 catch 块中抛出了一个新的RuntimeException,这个新的RuntimeException仍然受制于第一个 catch 块的 finally 子句

    如果你想打多个 catch,你必须嵌套你的 try/catch。控制流总是:

     try --> catch --> finally.
    

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 2015-03-22
      • 2014-03-05
      • 2023-01-25
      • 2014-12-18
      • 1970-01-01
      • 2016-04-02
      • 2013-08-02
      • 2012-11-20
      相关资源
      最近更新 更多