CodeGym /课程 /Java 语法 /多重捕获的工作原理

多重捕获的工作原理

Java 语法
第 9 级, 课程 7
可用
多重捕获的工作原理 - 1

“还有一些有趣的课程。噢,我多么喜欢教书!”

“我给大家介绍一下多重 catch 块的工作原理。很简单:try 块中发生异常时,执行移动到第一个 catch 块。”

“如果 catch 块括号中指示的类型与抛出异常的类型匹配,则在该块内部开始执行。”否则,我们移动到下一个 catch 块,其中执行相同的检查”。

“如果 catch 块用完还未捕获异常,则异常会重新抛出并且当前方法会异常终止。”

“我明白了。与异常类型一致的 catch 块会立即执行。”

“是的,不错。但实际情况有点复杂。类可以继承其他类。如果 Cow 类继承了 Animal 类,则 Cow 对象不仅会被 Cow 变量引用,也会被 Animal 变量引用。”

“然后呢?”

“因为所有的异常继承 Exception 或 RuntimeException(这也继承 Exception),它们仍然可以使用‘catch (Exception e)’或‘catch (RuntimeException e)’。”

“然后呢?”

“我们可以得出两个结论。首先,你可以使用‘catch (Exception e)’捕获任何异常。其次,catch 块的顺序很重要。”

“下面是一些示例:”

“除以 0 后发生的 ArithmeticException 会在第二个 catch 块被捕获”。

代码
try
{
    System.out.println("调用 method1 之前。");
    int a = 1 / 0;
    System.out.println("调用 method1 之后。这将永远不会显示。");
}
catch (NullPointerException e)
{
    System.out.println("空引用。已捕获异常。");
}
catch (ArithmeticException e)
{
    System.out.println("除以零。已捕获异常。");
}
catch (Exception e)
{
    System.out.println("其他任何错误。已捕获异常。");
}

“在下例中,ArithmeticException 会在第一个 catch 块被捕获,因为所有的异常继承 Exception,即 Exception 涵盖所有异常。”

代码
try
{
    System.out.println("调用 method1 之前。");
    int a = 1/0;
    System.out.println("调用 method1 之后。这将永远不会显示。");
}
catch (Exception e)
{
    System.out.println("其他任何错误。已捕获异常。");
}
catch (NullPointerException e)
{
    System.out.println("空引用。已捕获异常。");
}
catch (ArithmeticException e)
{
    System.out.println("除以零。已捕获异常。");
}

“在下例中,ArithmeticException 不会被捕获。它会被重新抛回到调用方法。”

代码
try
{
    System.out.println("调用 method1 之前。");
    int a = 1/0;
    System.out.println("调用 method1 之后。这将永远不会显示。");
}
catch (NullPointerException e)
{
    System.out.println("空引用。已捕获异常。");
}

“这样的确说得清楚一些。这些异常并不是简单的话题。”

“只是看起来是这样。它们实际上是 Java 中最简单的内容。”

“我不知道是该高兴还是难过…”

评论 (23)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
MEW 级别 14,Kunming,China
25 四月 2025
我不知道是该高兴还是难过…
17022 级别 1,Guangzhou,China
2 六月 2024
我不知道是该高兴还是难过
烂泥扶不上墙机器人 级别 9,Chongqing,China
21 四月 2024
我不知道是该高兴还是难过🤣
简默 级别 15,Central District,Hong Kong
6 十二月 2023

我不知道是该高兴还是难过🤪
黄z聰 级别 18,Tokyo,China
28 十一月 2023
我不知道是该高兴还是难过🤣
HOHOZ 级别 11,Australia
28 十一月 2023
我不知道是该高兴还是难过…
哈哈 级别 12,China,China
25 十月 2023
我不知道是该高兴还是难过
职业混分师 级别 31,China,China
10 八月 2023
我不知道是该高兴还是难过🤡
学不了一点 级别 22,United Kingdom,中国
8 五月 2023
我不知道是该高兴还是难过
Super Ego 级别 14,Wu Han,China
2 三月 2023
我不知道是该高兴还是难过…”🤣🤣🤣 秀啊