19

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

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

我已经浏览了这个论坛的一些其他主题。他们谈论在抛出堆栈跟踪时维护堆栈跟踪,而不是让它用于异常等。我知道有人说(这里)Thowable 是异常的超类,我们不应该使用它。但是其他人(这里)说异常是针对“异常”情况的。

这个问题更像是讨论一个人比另一个人更好,而不是问如何。

4

3 回答 3

27

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

Error是什么,你根本无法处理: OutOfMemoryError, VirtualMachineError, 等等。

Exception是针对特殊情况的。

例外有两种情况:

  1. RuntimeExceptions。

    这些,你不知道: NullPointerException, ClassCastException, 等等。

  2. Checked例外。

    这些是您的代码知道并应明确捕获的异常 ( ... throws MyException): IOExceptions 等。

如果您希望您的代码的用户明确地处理一些异常情况,最好只扩展Exception,而不是扩展RuntimeException. 没有必要扩展Throwable

于 2013-02-15T09:49:32.557 回答
4

ThrowableError&的超类Exception

LikeExceptionError可以扔和处理。

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

您不需要捕获错误对象或错误子类型。你也可以自己抛出一个错误(尽管除了 AssertionError 你可能永远不会想要),你可以捕获一个,但同样,你可能不会。例如,如果您遇到 OutOfMemoryError,您实际上会怎么做?

牢记这个概念,Throwable如果你想投掷和/或抓住Exception两者Error,我建议扩展。Exception如果您只想投掷和/或接球,请延长Exception

于 2013-02-15T09:51:14.813 回答
4

从根本上说,您应该在创建时扩展ExceptionCustom ExceptionException并且Error都扩展Throwable,扩展确实没有意义Throwable

于 2013-02-15T09:40:24.207 回答