java - 什么时候我们会直接扩展java.lang.Error?

标签 java

在什么用例中需要自定义 Error 类?

我知道Java API中有许多专门的Error子类(例如LinkageErrorServiceConfigurationErrorThreadDeathVirtualMachineError code>),但我认为这些只是 Java 运行时所需要的,而在 Java 开发人员的应用程序代码中大多不需要。

我很了解创建自定义 Exception 类及其使用场景,但我不确定 Error

最佳答案

如文档所述:

An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.

另一方面,异常是为了被捕获而设计的。未经检查的 RuntimeException 应该明智地捕获(因为引发它的代码表明发生了意外的事情),但 JVM 本身没有危险;如果调用者相信它可以从 RuntimeException 中恢复,那么这样做是安全的。

因此,如果您的程序中存在没有“合理的应用程序”想要处理的内容,则错误是适当的。然而,这种情况非常非常罕见。

查看一些现有的子类,例如 LinkageErrorVirtualMachineError 及其子类 InternalErrorOutOfMemoryErrorStackOverflowErrorUnknownError - 当 JVM 发生故障并且无法恢复时引发这些错误,甚至不让用户尝试处理它。

如果您还有其他情况,即您的代码可能会发生灾难性的失败,并且您想要类似地强制应用程序终止,请使用 Error(可能是 AssertionError)。然而,绝大多数情况下,某种 RuntimeException 就足够了,因为它允许用户至少在程序运行时尝试纠正问题。

关于java - 什么时候我们会直接扩展java.lang.Error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30906493/

相关文章:

java - 如何在运行时注册 WebSecurityConfigs?

java - Payara 上的应用程序配置属性(如何阅读它们)

java - 使用 MSI 从本地运行的 java 应用程序连接到 Azure Keyvault 的方法

java - 将斐波那契存储在数组中并打印用户期望值

java - Jersey - 在运行时设置 REST 响应编码

java - 在 Controller 或服务中进行验证?

java - 如何产生一个随机的字母数字串作为 session 的唯一标识符

java - 多线程和 Google App Engine Servlet

java - 为什么 Spring AOP @pointcut 中的这个语法错误没有弹出任何错误?

java - 缩小 JSPX 页面中的 JavaScript 代码(在 Spring MVC Web 应用程序中)