【问题标题】:Custom Exception class - extends from Exception or Thowable? [duplicate]自定义异常类 - 从 Exception 或 Thowable 扩展? [复制]
【发布时间】:2013-02-15 09:34:35
【问题描述】:

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

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

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

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

【问题讨论】:

  • 最后,您要在顶层捕获的是YourException - 无论是异常还是 Throwable 都没有太大区别。如果其他人可能会使用您的 API 并且必须捕获该异常,那么扩展 Exception 可能会产生较少的惊喜。
  • 感谢您的回复。是的,我同意。我只是确保我的决定是正确的。我不希望任何人欺负我。 :)

标签: java exception-handling


【解决方案1】:

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

Error 是东西,你根本无法处理OutOfMemoryErrorVirtualMachineError

Exception 用于例外情况

例外有两种形式:

  1. RuntimeExceptions.

    这些,您不知道NullPointerExceptionClassCastException 等。

  2. Checked 异常。

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

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

【讨论】:

    【解决方案2】:

    ThrowableErrorException 的超类。

    ExceptionError 一样,可以扔和处理。

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

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

    牢记这个概念,如果你想同时抛出和/或捕获ExceptionError,我建议扩展Throwable。如果您只想投掷和/或抓住Exception,请扩展Exception

    【讨论】:

      【解决方案3】:

      从根本上说,您应该在创建 Custom Exception 时扩展 Exception 类。 ExceptionError 都扩展了Throwable,扩展Throwable 真的没有意义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 2021-01-20
        • 1970-01-01
        • 1970-01-01
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多