有时候,我看到

try {

} catch(Throwable e) {

}

有时

try {

} catch(Exception e) {

}

有什么不同?


当前回答

Throwable是Exception和Error的超类。在正常情况下,我们应该总是捕获Exception的子类,这样根本原因就不会丢失。

只有在Java代码无法控制的特殊情况下,才应该捕获Error或Throwable。

我记得捕捉Throwable来标记本机库未加载。

其他回答

第一个捕获Throwable的所有子类(包括Exception和Error),第二个捕获Exception的所有子类。

错误在编程上是无法以任何方式恢复的,通常不会被捕获,除了日志目的(再次传递它)。异常是可编程恢复的。它的子类RuntimeException表示一个编程错误,通常也不会被捕获。

我见过有人使用Throwable来捕捉由于基础设施故障/不可用而可能发生的一些错误。

Throwable是Exception和Error的超类。在正常情况下,我们应该总是捕获Exception的子类,这样根本原因就不会丢失。

只有在Java代码无法控制的特殊情况下,才应该捕获Error或Throwable。

我记得捕捉Throwable来标记本机库未加载。

通过捕获Throwable,它包含了Error的子类。通常不应该这样做,除非在线程的最高“catch all”级别,您希望记录或以其他方式处理可能出错的所有内容。它在框架类型的应用程序(例如应用服务器或测试框架)中更为典型,在这些应用程序中,它可以运行未知的代码,并且尽可能不受该代码的任何错误的影响。

我觉得这个应该放在这里

(img的Alt链接)

来源:https://www.tutorialspoint.com/java/java_exceptions.htm