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

时间:2010-02-16 15:49:41

标签: java exception exception-handling throwable

有时候我会看到

try {

} catch(Throwable e) {

}

有时

try {

} catch(Exception e) {

}

有什么区别

5 个答案:

答案 0 :(得分:204)

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

答案 1 :(得分:146)

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

Error在程序上是不可恢复的,通常不会被捕获,除了记录目的(再次传递)。 Exception可以通过编程方式恢复。它的子类RuntimeException表示编程错误,通常也不会被捕获。

答案 2 :(得分:18)

ThrowableException以及Error的超类。在正常情况下,我们应该始终捕获Exception的子类,以便根本原因不会丢失。

只有在您看到可能出现问题而且无法控制Java代码的特殊情况下,您应该抓住ErrorThrowable

  

我记得抓住Throwable来标记未加载本机库。

答案 3 :(得分:14)

Thowable甚至捕获了所有内容,即使是默认情况下抛出的ThreadDeath也会停止现在已弃用的Thread.stop()方法的线程。因此,通过捕获Throwable,您可以确保在不至少通过catch块的情况下永远不会离开try块,但是您应该准备好处理OutOfMemoryErrorInternalError或者StackOverflowError

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

答案 4 :(得分:0)

我已经看到人们使用Throwable捕获由于基础架构故障/不可用而可能发生的一些错误。