在什么用例中需要自定义 Error
类?
我知道Java API中有许多专门的Error子类(例如LinkageError
、ServiceConfigurationError
、ThreadDeath
、VirtualMachineError
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
中恢复,那么这样做是安全的。
因此,如果您的程序中存在没有“合理的应用程序”想要处理的内容,则错误
是适当的。然而,这种情况非常非常罕见。
查看一些现有的子类,例如 LinkageError
和 VirtualMachineError
及其子类 InternalError
、OutOfMemoryError
、 StackOverflowError
和 UnknownError
- 当 JVM 发生故障并且无法恢复时引发这些错误,甚至不让用户尝试处理它。
如果您还有其他情况,即您的代码可能会发生灾难性的失败,并且您想要类似地强制应用程序终止,请使用 Error
(可能是 AssertionError
)。然而,绝大多数情况下,某种 RuntimeException
就足够了,因为它允许用户至少在程序运行时尝试纠正问题。
关于java - 什么时候我们会直接扩展java.lang.Error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30906493/