java为什么Exception将Throwable作为构造函数参数而不是Exception?
我最近注意到Exception
有几个构造函数将Throwable
作为参数Throwable
有两个子类Error
和Exception
,通常所有文档都表明不应尝试捕获或处理Error
。因此,我很好奇为什么Exception
将Throwable
作为构造函数参数而不是Exception
。这意味着可以使用Error
作为其原因创建Exception
,并且可以由应用程序处理。为什么会这样
自定义Exception
类是否应该只提供以Exception
为参数的构造函数
# 1 楼答案
IMHO,
Exception
类将Throwable
作为参数,因为某些库或API可能会创建自己的类型来扩展Throwable
,然后您的异常处理程序也需要能够处理这些类型你也可以
throw
一个Throwable
不一定是一个异常,这使得抛出一个自定义类型的程序失败变得非常容易,基于此,它将具有它的“可恢复性”级别对于自定义异常类,我认为这取决于处理异常时所需的粒度,大多数常见情况下会优雅地处理
Throwable
,因为您可能无法从错误中恢复,但仍然需要通知用户发生了错误# 2 楼答案
我想这基本上是因为:
不建议处理
Error
,但它不被禁止无论如何,编程到接口是一种很好的做法,因此参数类型应该支持最广泛的类型,将其作为根接口
Throwable