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