有时候,我看到
try {
} catch(Throwable e) {
}
而有时
try {
} catch(Exception e) {
}
有什么区别?
有时候,我看到
try {
} catch(Throwable e) {
}
而有时
try {
} catch(Exception e) {
}
有什么区别?
Answers:
通过捕获,Throwable
它包含了子类化的东西Error
。通常,您不应该这样做,除非可能是在要记录的线程的最高“捕获所有”级别,或者绝对要处理可能出错的所有内容。这将是一个框架型应用程序(例如应用程序服务器或一个测试框架),它可以运行未知代码,不应受到影响比较典型的事情是去错代码,尽可能多地。
throw new Throwable();
,因此这是真正抓住一切的唯一途径。
第一个捕获的所有子类Throwable
(包括Exception
和Error
),第二个捕获的所有子类Exception
。
Error
在任何情况下都无法以编程方式恢复,并且通常不会被捕获,除非出于日志目的(将其再次传递)。Exception
可通过编程方式恢复。它的子类RuntimeException
表示编程错误,通常也不会被捕获。
Error
日志记录,并且仍然会记录日志; 2)除非有日志记录,否则您可能永远不会收到有关OOM发生的通知,这使您想知道为什么服务器开始表现为“滑稽”
programmatically unrecoverable
是什么意思?它是如此严重,以至于我们无法再捕获(记录等)该Java方法后再调用它,而没有机会从JVM中获得不可预测的行为?
Its subclass RuntimeException indicates a programming error
:不确定我是否同意此声明。如果是这样,则意味着所有预期的异常都应检查为异常。如果我期望某些事情可能失败并且无法通过我的应用程序恢复,但我希望至少引发有意义的异常该怎么办?在这种情况下,使用检查异常似乎没有用,并会创建样板代码。