有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么Exception将Throwable作为构造函数参数而不是Exception?

我最近注意到Exception有几个构造函数将Throwable作为参数Throwable有两个子类ErrorException,通常所有文档都表明不应尝试捕获或处理Error。因此,我很好奇为什么ExceptionThrowable作为构造函数参数而不是Exception。这意味着可以使用Error作为其原因创建Exception,并且可以由应用程序处理。为什么会这样

自定义Exception类是否应该只提供以Exception为参数的构造函数


共 (2) 个答案

  1. # 1 楼答案

    IMHO,Exception类将Throwable作为参数,因为某些库或API可能会创建自己的类型来扩展Throwable,然后您的异常处理程序也需要能够处理这些类型

    你也可以throw一个Throwable不一定是一个异常,这使得抛出一个自定义类型的程序失败变得非常容易,基于此,它将具有它的“可恢复性”级别

    对于自定义异常类,我认为这取决于处理异常时所需的粒度,大多数常见情况下会优雅地处理Throwable,因为您可能无法从错误中恢复,但仍然需要通知用户发生了错误

  2. # 2 楼答案

    我想这基本上是因为:

    1. 不建议处理Error,但它不被禁止

    2. 无论如何,编程到接口是一种很好的做法,因此参数类型应该支持最广泛的类型,将其作为根接口Throwable