代码之家  ›  专栏  ›  技术社区  ›  Ravi Gupta

Throwable的哪个子类应该被捕获,哪个不应该被捕获?

  •  4
  • Ravi Gupta  · 技术社区  · 15 年前

    美国石油学会说永远不要抓 可抛出 错误

    2 回复  |  直到 15 年前
        1
  •  7
  •   oxbow_lakes    15 年前

    一般来说 Error 有什么严重的问题吗 在平台本身内部 )这是你无法想象的。唯一一次我关心的是接球 是为了 ,然后我重新抛出。

    这一点非常重要,因为很容易让错误(和运行时异常)在调用堆栈中传播,从而永远不会记录它们(例如,使用 executorService.submit(Runnable) Future )

    错误

    • 内存不足
    • 抽象方法错误(例如,针对不同版本的库运行,而针对不同版本的库运行)
    • 断言(即程序员定义的 不变性

    RuntimeException

    • 不检查null或传入null
    • 传递无效参数,或允许无效状态

    我通常也会建议在这些方面快速失败,但这是一个灰色地带;也许在将用户输入传递到服务器之前,您没有检查用户输入-几乎不值得将您的应用程序崩溃!

    选中的 Exception s(即非运行时)应该用于您可以合理预期会发生并在代码中合理(或可以想象)处理的内容。就我个人而言,我喜欢选中的异常,但由于以相同的方式(即在多个相同的catch块中)处理不同的异常类型所涉及的冗长/重复,这些异常会变得很麻烦。像Scala这样的语言有更好的捕获语法,但后来他们删除了 选中的 也有例外!

        2
  •  4
  •   Guss    15 年前

    是的,我认为你的分析在这里是正确的-你不应该抓住 Error OutOfMemoryError .

    Throwable 可抛出 )然后禁用该代码并报告它。

    Exception RuntimeException .