jab*_*abe 1 java exception-handling
在Java中,我经常关闭finally块中的变量,如下所示:
public void someMethod(){
InputStream inStream = null;
PreparedStatement pStatement = null;
try{ do something here }
catch(Exception ex){ do something here }
finally{
try{ if (inStream != null) inStream.close(); } catch(Exception ex){/* do nothing */}
try{ if (pStatement != null) pStatement.close(); } catch(Exception ex){/* do nothing */}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,如果方法说它抛出异常,是否有一个像"最后"的地方我可以关闭方法的变量?例如:
public void anotherMethod() throws SQLException {
// This method doesn't need a try/catch because the method throws an exception.
InputStream inStream = null;
PreparedStatement pStatement = null;
// Where can I ensure these variables are closed?
// I would prefer not to have them be global variables.
}
Run Code Online (Sandbox Code Playgroud)
正确的方法实际上是使用Java 7中引入的try-with-resources构造.
public void anotherMethod() throws SQLException {
try (PreparedStatement st = connection.prepareStatement(...)) {
// do things with st
}
}
Run Code Online (Sandbox Code Playgroud)
这可以确保无论try块中发生什么(成功执行或以异常结束),资源都将被关闭.您不需要添加catch部件,因为该方法会抛出SQLException,更重要的是,您不需要添加finally子句:所有打开的资源都保证在该语句之后关闭.
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |