在try catch中使用Throwable和Exception之间的区别

有时我会看到

try { } catch(Throwable e) { } 

有时

 try { } catch(Exception e) { } 

有什么不同

通过捕获Throwable,它包含了Error的子类。 一般情况下你都不应该那样做,除非是在你想login的线程中最高的“全部捕获”级别,否则绝对可以处理所有可能出错的线程。 在一个框架types的应用程序(例如一个应用程序服务器或一个testing框架)中,它可能会运行未知的代码,并且不会受到该代码出错的任何影响。

第一个捕获Throwable所有子类(这包括ExceptionError ),第二个捕获Exception所有子类。

Error以任何方式以编程方式不可恢复,通常不会被捕获,除了日志logging(再次通过它)。 Exception是以编程方式可恢复的。 它的子类RuntimeException表示一个编程错误,通常也不能被捕获。

Thowable捕获真正的一切甚至是ThreadDeath,默认情况下会抛出ThreadDeath来停止现在不推荐使用的Thread.stop()方法中的线程。 所以通过捕获Throwable你可以肯定,你永远不会离开try块,至less没有通过你的catch块,但你应该准备好处理OutOfMemoryErrorInternalErrorStackOverflowError

捕捉Throwable对于外部服务器循环来说是最有用的,它将各种请求委托给外部代码,但是它本身永远不会终止以保持服务的活跃。

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

只有在发生错误的情况下才能控制Java代码的情况下,您应该捕获错误或Throwable。

我记得捕捉Throwable标志着一个本地库没有加载。