在try catch中使用Throwable和Exception之间的区别
有时我会看到
try { } catch(Throwable e) { }
有时
try { } catch(Exception e) { }
有什么不同
通过捕获Throwable,它包含了Error的子类。 一般情况下你都不应该那样做,除非是在你想login的线程中最高的“全部捕获”级别,否则绝对可以处理所有可能出错的线程。 在一个框架types的应用程序(例如一个应用程序服务器或一个testing框架)中,它可能会运行未知的代码,并且不会受到该代码出错的任何影响。
第一个捕获Throwable
所有子类(这包括Exception
和Error
),第二个捕获Exception
所有子类。
Error
以任何方式以编程方式不可恢复,通常不会被捕获,除了日志logging(再次通过它)。 Exception
是以编程方式可恢复的。 它的子类RuntimeException
表示一个编程错误,通常也不能被捕获。
Thowable
捕获真正的一切甚至是ThreadDeath,默认情况下会抛出ThreadDeath来停止现在不推荐使用的Thread.stop()
方法中的线程。 所以通过捕获Throwable
你可以肯定,你永远不会离开try块,至less没有通过你的catch块,但你应该准备好处理OutOfMemoryError
和InternalError
或StackOverflowError
。
捕捉Throwable
对于外部服务器循环来说是最有用的,它将各种请求委托给外部代码,但是它本身永远不会终止以保持服务的活跃。
Throwable是Exception的超类,也是Error。 在正常情况下,我们应该总是抓住Exception的子类,这样根本原因就不会丢失。
只有在发生错误的情况下才能控制Java代码的情况下,您应该捕获错误或Throwable。
我记得捕捉Throwable标志着一个本地库没有加载。
- Java如果与try / catch开销
- 主要的方法代码完全在try / catch里面:这是不好的做法吗?
- 获取android.content.res.Resources $ NotFoundException:即使资源存在于android中也是exception
- 可以从System.ArgumentException派生吗?
- collections被修改; 枚举操作可能不会在ArrayList中执行
- 如何在调用.LoadXml()之前检查stringinput中的有效xml
- 处理KeyNotFoundException的最佳方法
- 如何在Android中读取文本文件?
- C ++之间的差异03 throw()说明符C ++ 11 noexcept