gpt4 book ai didi

java - 在一个 catch block 中处理所有 Java 异常

转载 作者:行者123 更新时间:2023-12-01 06:51:12 24 4
gpt4 key购买 nike

当我尝试编写此代码时:

catch (Exception  | OutOfMemoryError| NumberFormatException| SQLException| IOException  e){
}

我收到错误:“异常 NumberFormatException 已被替代异常捕获”我非常理解它,并且从一开始就认为这是有道理的,因为异常是通用的。但是当我编写这段代码时:

 catch (Exception  | OutOfMemoryError  e){
}

它的工作没有任何问题,所以现在我开始感到困惑为什么我没有收到之前的错误。 OutOfMemmoryError 会捕获 Exception 无法捕获的内容吗?如果我想捕获所有可能的异常和错误,我应该写什么?我刚刚明白了这一点:

catch (Exception e){
}

不会为我捕获所有异常和错误,那么该怎么做呢?

最佳答案

为了更好地了解发生的情况,请查看 Java 异常层次结构。广泛的概述可以在 this diagram 中看到。 .

当您在单个 catch block 中捕获多个异常时,您应该只使用 catch 中的“最顶层”异常。例如,您的错误将持续存在于类似

catch (IOException | FileNotFoundException e)

因为FileNotFoundException扩展了IOException

在您的代码中,所有异常(OutOfMemoryError 除外)都是 java.lang.Exception 的子类型,因此会出现错误。 OutOfMemoryErrorjava.lang.Error 的子类型,它是一个 Throwable,但不是 Error

这是一个more fine-grained diagram representing the hierarchy of all java.lang.Exceptions within Throwable .

希望这有帮助。

最后,如果您真的想要在一个 catch block 中捕获所有异常和错误(正如其他人指出的那样,这是一个糟糕的想法),您可以执行以下操作之一以下内容:

catch (Exception | Error e)

catch (Throwable t)

关于java - 在一个 catch block 中处理所有 Java 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27531249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com