关于java:在try catch中使用Throwable和Exception之间的区别

Difference between using Throwable and Exception in a try catch

有时我看到

1
2
3
4
5
try {

} catch(Throwable e) {

}

有时

1
2
3
4
5
try {

} catch(Exception e) {

}

有什么区别


通过捕获Throwable,它包括Error子类的内容。通常不应该这样做,除非在一个线程的最高"catch all"级别,在这个级别上您想要记录日志,或者完全处理所有可能出错的事情。在框架类型的应用程序(例如,应用程序服务器或测试框架)中,它更为典型,在这种应用程序中,它可以运行未知代码,并且不应受到该代码出错的任何影响,尽可能多。


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

Error在任何情况下都是以编程方式不可恢复的,通常不会被捕获,除非是出于日志记录的目的(再次通过)。Exception是程序性可恢复的。它的子类RuntimeException表示编程错误,通常也不会被捕获。


ThrowableExceptionError的超类。在正常情况下,我们应该始终捕获Exception的子类,这样根本原因就不会丢失。

只有在特殊情况下,您可能看到错误的Java控件的错误,您应该捕获EDCOX1 1或EDCOX1 0。

I remember catching Throwable to flag that a native library is not loaded.


Thowable捕捉到了实际上所有的东西,甚至是threaddeath,默认情况下,threaddeath会被抛出,以阻止线程从现在被弃用的Thread.stop()方法中退出。因此,通过捕获Throwable,您可以确保在不经过catch块的情况下永远不会离开try块,但是您应该准备好处理OutOfMemoryErrorInternalErrorStackOverflowError

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