自定义exception类 – 从Exception或Thowable扩展?
我正在为我的应用程序设计一个自定义的Exception类。 我有一个非常基本的问题。 我应该从Exception类还是Thowable类扩展? 有什么好处?
我打算从底层层中抛出它并在顶层类中捕获它。 它会影响我使用Thowable over Exception的决定吗? 抓住Thowable是否从根本上说是正确的?
我在这个论坛中经历过其他一些话题。 他们谈论在抛出堆栈跟踪时保持堆栈跟踪而没有exception等等。我理解有人说( 这里 )Thowable是Exception的超类,我们不应该使用它。 但是其他人( 这里 )说Exception是针对“例外”的案例。
这个问题相当于讨论一个人如何比其他人更好而不是问如何。
Throwable
是一个适用于所有不良情况的类,可能出现:错误和exception。
Error
是你无法处理的 : OutOfMemoryError
, VirtualMachineError
等。
特殊情况除外 。
例外有两种:
-
RuntimeException
。这些,你不知道 :
NullPointerException
,ClassCastException
等。 -
Checked
exception。这些是您的代码知道的exception,应该明确地捕获(
... throws MyException
):IOException
s等。
如果您希望代码的用户明确处理某些exception情况,那么扩展Exception
而不是RuntimeException
会更好。 没有必要延长Throwable
。
Throwable
是Error
& Exception
的超级类。
像Exception
一样,也可以抛出和处理Error
。
但根据以下文档,这是不可取的:
您不需要捕获Error对象或Error子类型。 你也可以自己抛出一个错误(虽然你可能不会想要AssertionError除外),你可以抓住一个错误,但你可能也不会。 例如,如果你有一个OutOfMemoryError,你会真正做什么?
记住这个概念,如果你想抛出和/或捕获Exception
和Error
,我建议扩展Throwable
。 如果您只想抛出和/或捕获Exception
则扩展Exception
。
从根本上说,您应该在创建Custom Exception
扩展Exception
类。 Exception
和Error
都扩展了Throwable
,它实际上没有意义扩展Throwable
。