自定义异常类 - 从Exception或Throwable扩展?

时间:2013-02-15 09:34:35

标签: java exception-handling

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

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

我在这个论坛中经历了其他一些主题。他们谈论在抛出堆栈跟踪时保持堆栈跟踪,而不是将其用于异常等。 我理解有人说(here)Thowable是Exception的超级类,我们不应该使用它。但其他人(here)表示异常是针对" Exceptional"案例。

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

3 个答案:

答案 0 :(得分:21)

Throwable是一个针对所有不良情况的类,可能会出现:错误&异常。

Error根本无法处理OutOfMemoryErrorVirtualMachineError等等。

Exception适用于例外情况

例外分为两种:

  1. RuntimeException秒。

    这些,你不知道NullPointerExceptionClassCastException等。

  2. Checked例外。

    这些是您的代码知道的例外情况,应明确捕获(... throws MyException):IOException s等。

  3. 如果您希望代码的用户明确处理某些特殊情况,最好只扩展Exception,而不是RuntimeException。没有必要延长Throwable

答案 1 :(得分:4)

从根本上说,您应该在创建Exception时扩展Custom Exception课程。 ExceptionError都延伸Throwable,延伸Throwable实际上没有意义。

答案 2 :(得分:4)

ThrowableError&的超类Exception

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

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

  

您不需要捕获错误对象或错误子类型。您可以   也自己抛出一个错误(虽然不是AssertionError你   可能永远不会想要),你可以抓住一个,但又一个,你   可能不会。例如,如果你有一个,你会实际做什么   的OutOfMemoryError?

记住这个概念,如果你想抛出和/或捕捉Throwable&,我建议延长ExceptionError两者。如果您只想抛出和/或捕获Exception,请展开Exception