通常,a
RuntimeException表示编程错误(在这种情况下,您无法“处理”该错误,因为如果您知道期望发生错误,则可以避免该错误)。
捕获任何这些常规异常(包括
Throwable)都是一个坏主意,因为这意味着您声称自己了解所有可能出错的情况,尽管如此,您仍然可以继续。有时
Exception(而不是通常
Throwable)捕获堆栈的顶层是适当的,例如在Web服务器中-
因为通常 _单个_请求出了什么问题,您通常希望保持服务器正常运行并响应其他请求。我通常不会捕获
Throwable,因为其中包括
Error通常用于指示真正灾难性错误的子类,通常最好通过终止过程来“处理”这些错误。
从根本上讲,当出现错误时,您需要对继续执行特定任务非常谨慎-您需要对错误的含义有一个非常好的了解,否则您可能会对世界状况做出错误的假设,并使情况变得更糟。在
_大多数_情况下(并非全部),简单地放弃请求要比尝试继续进行下去要好,而不管发生什么神秘的失败。(尽管它确实很大程度上取决于上下文,例如,您可能不关心尝试获取一条辅助信息时出了什么问题。)
至于抓
Exception不抓
RuntimeException-那是不正确的。唯一奇怪的
RuntimeException是,它(和子类)是未经检查的异常,而的
Exception所有其他子类
Exception都经过检查。



