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

标签 java eclipse exception error-handling try-catch

当我尝试编写此代码时:

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/

相关文章:

java - 使用图像的二进制值更新 xml 文件

eclipse - 如何配置 Eclipse 以自动运行测试?

java - 透明窗

java - 捕获 NumberFormatException 是一种不好的做法吗?

python - PHP 的 error_get_last() 函数的 Python 替代品是什么?

java - 请求 : https://www. w3.org/2000/svg 找到 : http://www. w3.org/2000/svg

Java比较无序的ArrayLists

java - 我可以把它放到一个for循环中吗?

exception - try/catch 语句中有多少条语句?

java - 无法从 MigLayout 底部删除多余的行