Java Try-Catch混淆[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我正在学习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个回答
0
投票

之所以发生这种情况,是因为即使你在第一个拦截区域投掷了一个新的RuntimeException,这个新的RuntimeException仍然受到你的第一个拦截块的finally子句的约束。

如果你想要多次捕获,你必须嵌套你的尝试/捕获。控制流程始终是:

 try --> catch --> finally.

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.