cod*_*441 75 java try-catch-finally
为什么这样呢
} catch (SQLException sqle) {
sqle.printStackTrace();
} finally {
cs.close();
rs.close();
}
Run Code Online (Sandbox Code Playgroud)
而不是这个
} catch (SQLException sqle) {
sqle.printStackTrace();
}
rs.close();
cs.close();
Run Code Online (Sandbox Code Playgroud)
JUS*_*ION 83
因为如果抛出异常,除非捕获到异常,否则在执行块之后不会有代码try.一个块总是执行,不管你里面发生了什么块.finallytry
Jon*_*eet 24
看看你的陷阱 - 它会抛出DAOException.因此,即使在您给出的示例中,也不会执行catch块之后的语句.你所展示的内容(将一个异常包装在另一个异常中)是一种常见的模式 - 但另一种可能性是catch块"意外地"抛出异常,例如因为其中一个调用失败.
此外,您可能还有其他异常没有捕获 - 要么是因为您声明了方法抛出它们,要么是因为它们是未经检查的异常.你是否真的想泄漏资源,因为IllegalArgumentException被扔到了某个地方?
Ber*_*t F 12
因为如果抛出异常,
finally子句中的代码将在异常传播时执行,即使异常中止了方法执行的其余部分;
try/catch块之后的代码将不会被执行,除非catch块捕获异常而不重新抛出异常.
因为它确保了finally块中的东西被执行.例如,catch之后可能没有执行catch的东西,catch块中有另一个异常,这是非常可能的.或者你只是做你做的,并抛出一个包装原始异常的异常.
根据HeadFirst Java,即使try或catch块具有return语句,也会运行finally块。流程最终跳到最后再返回。