通常,这
Error是严重错误(通常 在平台本身内部 ),您无法想象得到处理。我曾经关心醒目的唯一时间
Error是为了 记录它
,下面我再重新抛出。
这是非常重要的,因为它很容易让错误(和运行时异常),以这样的方式,他们从未登录(例如,使用沿着调用堆栈
executorService.submit(Runnable)不听返回
Future)
Errors通常是这样的:
- 记不清
- 抽象方法错误(例如,针对不同版本的库运行)
- 断言(即,程序员定义的 不变量 ,或不应发生的事情-大声笑!)
然后,我会说
RuntimeExceptions通常(尽管并非总是)指示 编程 错误:
- 不检查null或传入null
- 传递无效的参数或允许无效的状态
- 遍历集合时修改集合
我通常也建议在这些方面进行快速失败,但这是一个灰色区域。也许您在将用户输入传递到服务器之前不检查用户输入-几乎不值得使您的应用崩溃!
Checked
Exception(即非运行时)应用于您可以合理预期发生并可以合理(或可以想象)在代码中处理的内容。我个人喜欢检查异常,但是由于以相同方式(即,在多个相同的catch块中)处理不同异常类型所涉及的冗长/重复,这些异常繁琐。Scala之类的语言具有更好的catch语法,但随后它们也删除了
检查 异常的概念!



