自定义异常类 - 从异常或可显示扩展?

2022-09-02 12:19:05

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

我打算从底层扔掉它,并在顶级类中捕捉它。它会影响我使用Thowable而不是Alition的决定。抓住一个Thowable从根本上是对的吗?

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

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


答案 1

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

Error是一些东西,你根本无法处理:,,等。OutOfMemoryErrorVirtualMachineError

Exception适用于特殊情况

例外情况有两种口味:

  1. RuntimeExceptions.

    这些,你不知道:,,等。NullPointerExceptionClassCastException

  2. Checked异常。

    这些是异常,您的代码知道这些异常,并且应该显式捕获 (): s 等。... throws MyExceptionIOException

如果您希望代码的用户显式处理一些异常情况,最好只扩展 ,而不是 .无需扩展 。ExceptionRuntimeExceptionThrowable


答案 2

Throwable是 & 的超级类。ErrorException

就像,也可以扔和处理。ExceptionError

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

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

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


推荐