使用rethrowing检查/未检查的异常?

时间:2010-07-12 14:06:41

标签: java exception exception-handling

重新抛出已检查和未检查的异常有什么用?

2 个答案:

答案 0 :(得分:7)

如果您想在问题发生时执行某些代码而不隐藏问题。

例如,假设您在写入数据库时​​发生异常时要回滚更改:

try {
    writeToDatabase();
} catch(Exception ex) {
    rollbackChanges();
}

如果您使用此代码,则调用函数将永远不会发现发生异常。

相反,你应该写

try {
    writeToDatabase();
} catch(Exception ex) {
    rollbackChanges();
    throw ex;
}

答案 1 :(得分:1)

有点生硬:使用异常处理。

在异常之前(或者在开发人员理解如何正确使用异常处理之前)考虑这一点,如果出现“出错”,程序员将返回错误代码,如-1或null。考虑到这一点,你会如何告诉它失败的几个方法(例如:大型API中的某些低级IO方法失败)?你可以将很多返回null s /或-1串起来,或者只是抛出一个异常,以便它迁移回应该被捕获的地方,甚至是JVM本身如果需要,因为这个例外可能是你无法恢复的。

基本上,如果您无法编写可以从抛出的异常中真正恢复的catch逻辑,那么您将重新抛出异常。这在Java中经常 ,因为Java会强制您捕获几乎所有的异常,因为大多数内容都是一个经过检查的异常。

至于rethrowing checked vs unchecked ...在执行J2EE应用程序时,我经常会从已检查的异常内部返回一个新的未经检查的异常(RuntimeExpcetion)。容器具有处理异常的默认方式,并向用户显示默认错误页面。这来自Aspect Oriented范例。我也是wrote about how to do this here