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

时间:2015-06-18 04:31:20

标签: java

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

我知道Java API中有许多专门的Error子类(例如LinkageErrorServiceConfigurationErrorThreadDeathVirtualMachineError),但我认为只有Java运行时的应用程序代码中不需要Java运行时。

我很清楚如何创建自定义Exception类及其使用方案,但我不确定Error

1 个答案:

答案 0 :(得分:1)

正如文档所述:

  

错误是Throwable的子类,表示合理的应用程序不应该试图捕获的严重问题。

另一方面,例外情况被设计为被抓住。应该明智地捕获未经检查的RuntimeException(因为引发它的代码表明发生了意外事件),但JVM本身并没有危险;如果来电者认为它可以从RuntimeException恢复,那么这样做是安全的。

因此,如果程序中存在 no “合理的应用程序”需要处理的内容,则Error是合适的。然而,这是非常非常罕见的。

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

如果您有一个额外的情况,您的代码可能会灾难性地失败,并且您希望同样强制应用程序终止,请使用Error(可能是AssertionError)。但绝大多数情况下,某种RuntimeException就足够了,因为它允许用户在程序运行时至少尝试纠正问题。