2010-01-27 53 views

回答

5

一般来说,Error是严重错误的东西(通常在平台本身内的),这是你无法想象的。我曾经关心过的唯一一次关注Error是为了登录它,然后我再抛出。

这是非常重要的,因为它(例如,使用executorService.submit(Runnable)不听返回Future

Error容易让错误(和运行时异常),以这样的方式,他们从未登录沿着调用堆栈s为平常之类的东西:

  • 了内存
  • 抽象方法错误(例如,运行针对不同版本的库中的那些内置反对)
  • 断言(即程序员定义不变,或事情不应该发生的 - 笑)

我会那么说,RuntimeException s为一般(但不总是)表示编程错误:

  • !不检查为空或传入空
  • 传递无效参数或允许无效状态
  • 在您迭代迭代时修改集合

我通常会建议在这些上快速失败,但这是一个灰色区域;也许你在将它传递给服务器之前不检查用户输入 - 很难让你的应用崩溃!

选中Exception s(即非运行时)应该用于您可以合理地期望在代码中合理(或可想象)发生的事情。就我个人而言,我喜欢检查异常,但由于涉及以相同方式处理不同异常类型(即在多个相同的catch块中)中涉及的冗长/重复,所以这些异常变得繁琐。语言如斯卡拉有更好的捕捉语法,但随后他们删除了的概念,检查了例外情况!

3

是的,我觉得你的分析是正确的在这里 - 你不应该赶上Error因为他们代表的是不能从恢复运行时错误,如OutOfMemoryError

捕获Throwable的唯一理由是如果您正在运行外部第三方代码,而这些代码对于您的程序的正确操作不是必需的 - 如果您不相信代码,就抓住所有东西,没想到(Throwable)然后禁用该代码并报告它。

此外,区分ExceptionRuntimeException也许是个好主意。

+0

喜欢关于第三方代码的想法。谢谢 – 2010-01-27 10:44:07

相关问题