在什么用例中需要自定义Error
类?
我知道Java API中有许多专门的Error子类(例如LinkageError
,ServiceConfigurationError
,ThreadDeath
,VirtualMachineError
),但我认为只有Java运行时的应用程序代码中不需要Java运行时。
我很清楚如何创建自定义Exception
类及其使用方案,但我不确定Error
。
答案 0 :(得分:1)
正如文档所述:
错误是Throwable的子类,表示合理的应用程序不应该试图捕获的严重问题。
另一方面,例外情况被设计为被抓住。应该明智地捕获未经检查的RuntimeException
(因为引发它的代码表明发生了意外事件),但JVM本身并没有危险;如果来电者认为它可以从RuntimeException
恢复,那么这样做是安全的。
因此,如果程序中存在 no “合理的应用程序”需要处理的内容,则Error
是合适的。然而,这是非常非常罕见的。
查看一些现有的子类,例如LinkageError
和VirtualMachineError
及其子类InternalError
,OutOfMemoryError
,StackOverflowError
和UnknownError
- 当JVM发生故障时会引发这些问题,并且它无法恢复,甚至不允许用户尝试处理它。
如果您有一个额外的情况,您的代码可能会灾难性地失败,并且您希望同样强制应用程序终止,请使用Error
(可能是AssertionError
)。但绝大多数情况下,某种RuntimeException
就足够了,因为它允许用户在程序运行时至少尝试纠正问题。