有时候,我看到
try {
} catch(Throwable e) {
}
有时
try {
} catch(Exception e) {
}
有什么不同?
有时候,我看到
try {
} catch(Throwable e) {
}
有时
try {
} catch(Exception e) {
}
有什么不同?
通过捕获Throwable,它包含了Error的子类。通常不应该这样做,除非在线程的最高“catch all”级别,您希望记录或以其他方式处理可能出错的所有内容。它在框架类型的应用程序(例如应用服务器或测试框架)中更为典型,在这些应用程序中,它可以运行未知的代码,并且尽可能不受该代码的任何错误的影响。
第一个捕获Throwable的所有子类(包括Exception和Error),第二个捕获Exception的所有子类。
错误在编程上是无法以任何方式恢复的,通常不会被捕获,除了日志目的(再次传递它)。异常是可编程恢复的。它的子类RuntimeException表示一个编程错误,通常也不会被捕获。
Throwable实际上捕获了所有东西,甚至包括默认情况下抛出的ThreadDeath,以停止现在已弃用的thread .stop()方法的线程。因此,通过捕获Throwable,你可以确保你永远不会离开try块,至少没有通过你的catch块,但你应该准备好处理OutOfMemoryError和InternalError或StackOverflowError。
捕获Throwable对于外部服务器循环最有用,这些外部服务器循环将各种请求委托给外部代码,但本身可能永远不会终止以保持服务存活。
Throwable是Exception和Error的超类。在正常情况下,我们应该总是捕获Exception的子类,这样根本原因就不会丢失。
只有在Java代码无法控制的特殊情况下,才应该捕获Error或Throwable。
我记得捕捉Throwable来标记本机库未加载。
我觉得这个应该放在这里
(img的Alt链接)
来源:https://www.tutorialspoint.com/java/java_exceptions.htm