Java 如何正确关闭资源?
我有所有传播异常的方法,然后我在一个地方处理,但是我意识到了一些事情 假设我有这样的方法Java 如何正确关闭资源?,java,exception-handling,Java,Exception Handling,我有所有传播异常的方法,然后我在一个地方处理,但是我意识到了一些事情 假设我有这样的方法 public void foo() throws Exception e { Statement stmt = createStatement(); doSomething(stmt); stmt.close(); } 我的问题是,如果doSometing()方法抛出异常,语句将不会关闭,但我不想在那里处理异常。让try-and-catch只返回异常并最终关闭语句是正确的方法吗?在finall
public void foo() throws Exception e {
Statement stmt = createStatement();
doSomething(stmt);
stmt.close();
}
我的问题是,如果doSometing()方法抛出异常,语句将不会关闭,但我不想在那里处理异常。让try-and-catch只返回异常并最终关闭语句是正确的方法吗?在finally块中关闭它。应释放/关闭所有打开的资源
有关更多信息,请参见此-在finally块中关闭它。应释放/关闭所有打开的资源
有关详细信息,请参见此-是的,您可以进一步抛出异常
try {
stmt = createStatement();
doSomething(stmt);
}
catch (Exception e) {
throw e;
}
finally {
if(stmt != null)
stmt.close();
}
是的,您可以进一步抛出异常
try {
stmt = createStatement();
doSomething(stmt);
}
catch (Exception e) {
throw e;
}
finally {
if(stmt != null)
stmt.close();
}
修改答案。实际上,您可以在try块之前初始化stmt。这样就不需要查看它是否为null
,因此这就足够了:
public void foo() throws Exception e {
final Statement stmt = createStatemnt( );
try {
doSomething(stmt);
} finally {
stmt.close();
}
}
修改答案。实际上,您可以在try块之前初始化stmt。这样就不需要查看它是否为null
,因此这就足够了:
public void foo() throws Exception e {
final Statement stmt = createStatemnt( );
try {
doSomething(stmt);
} finally {
stmt.close();
}
}
不需要添加那个catch块,因为方法已经声明抛出异常。你可以在没有捕手的情况下尝试最后一次拦截。为什么你要费心在这里捕手并重新拦截?尝试最终,无需重新调整即可正常工作。我错过了签名中的抛出,我认为问题是在catch块中进一步抛出异常是否有效。不需要添加catch块,因为方法已经声明抛出异常。你可以在没有捕手的情况下尝试最后一次拦截。为什么你要费心在这里捕手并重新拦截?尝试最终,无需重新调整即可正常工作。我错过了签名中的抛出,我想问题是在catch块中进一步抛出异常是否有效。