自定义exception类 – 从Exception或Thowable扩展?

我正在为我的应用程序设计一个自定义的Exception类。 我有一个非常基本的问题。 我应该从Exception类还是Thowable类扩展? 有什么好处?

我打算从底层层中抛出它并在顶层类中捕获它。 它会影响我使用Thowable over Exception的决定吗? 抓住Thowable是否从根本上说是正确的?

我在这个论坛中经历过其他一些话题。 他们谈论在抛出堆栈跟踪时保持堆栈跟踪而没有exception等等。我理解有人说( 这里 )Thowable是Exception的超类,我们不应该使用它。 但是其他人( 这里 )说Exception是针对“例外”的案例。

这个问题相当于讨论一个人如何比其他人更好而不是问如何。

Throwable是一个适用于所有不良情况的类,可能出现:错误和exception。

Error是你无法处理的OutOfMemoryErrorVirtualMachineError等。

特殊情况除外

例外有两种:

  1. RuntimeException

    这些,你不知道NullPointerExceptionClassCastException等。

  2. Checkedexception。

    这些是您的代码知道的exception,应该明确地捕获( ... throws MyException ): IOException s等。

如果您希望代码的用户明确处理某些exception情况,那么扩展Exception而不是RuntimeException会更好。 没有必要延长Throwable

ThrowableErrorException的超级类。

Exception一样,也可以抛出和处理Error

但根据以下文档,这是不可取的:

您不需要捕获Error对象或Error子类型。 你也可以自己抛出一个错误(虽然你可能不会想要AssertionError除外),你可以抓住一个错误,但你可能也不会。 例如,如果你有一个OutOfMemoryError,你会真正做什么?

记住这个概念,如果你想抛出和/或捕获ExceptionError ,我建议扩展Throwable 。 如果您只想抛出和/或捕获Exception则扩展Exception

从根本上说,您应该在创建Custom Exception扩展Exception类。 ExceptionError都扩展了Throwable ,它实际上没有意义扩展Throwable