我有方法都传播异常然后我在一个地方处理,但我意识到了。
假设我有这样的方法
public void foo() throws Exception e {
Statement stmt = createStatement();
doSomething(stmt);
stmt.close();
}
我的问题是,如果doSometing()方法抛出异常,语句将不会被关闭,但我不想在那里处理异常。是尝试捕获的唯一方法是只重新抛出异常并最终关闭语句吗?
答案 0 :(得分:6)
public void foo() throws Exception e {
Statement stmt = null ;
try {
stmt = createStatement();
doSomething(stmt);
} finally {
if(stmt != null)
stmt.close();
}
}
答案 1 :(得分:2)
在finally块中关闭它。所有打开的资源都应该被释放/关闭。
有关详情,请参阅此内容 - http://www.ibm.com/developerworks/java/library/j-jtp03216.html
答案 2 :(得分:1)
修改为nos回答。实际上,您可以在尝试阻止之前初始化 stmt 。这样就没有必要查看它是null
,所以这就足够了:
public void foo() throws Exception e {
final Statement stmt = createStatemnt( );
try {
doSomething(stmt);
} finally {
stmt.close();
}
}
答案 3 :(得分:-1)
是的,你可以进一步抛出异常
try {
stmt = createStatement();
doSomething(stmt);
}
catch (Exception e) {
throw e;
}
finally {
if(stmt != null)
stmt.close();
}