在Java核心技术 第十版 卷 Ⅰ page 278位置,讲到了带有资源的try语句,这里记录一下使用技巧。
首先,一般的try语句格式如下
try {
// Open some resource like InputStram or database connection etc.
//Connection connection = SessionFactory。getConnection();
//then implementate some businese logic code
} catch (Exception e) {
// execute this code when some exception occured
}finally {
// no matter happend ,this module of code will be called finally.
//in this module,close resource opened in try module.
//maybe still need try..catch code when close it. just like this
/*
if(connection!=null){
try {
connection.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
*/
}
try模块打开资源,如数据库连接,输入流等,然后执行业务逻辑,遇到异常程序跳转至catch模块,无论是否发生异常,程序最终会执行finally模块,就在这个模块中关闭相关资源,然而,关闭资源的时候可能还需要再捕获一次异常,会显得代码比较冗长导致可读性变差。
带有资源的try语句形式
try(Resource res = ....){
work with res
}catch(Exception e){
handle exception
}
try块再执行结束后,会自动调用res.close()方法,换句话说,无论业务逻辑是否正常执行或者遇到异常,如同finally块一样,会自动执行资源关闭指令。资源可以指定多个
PS:带有资源的try语句自身也可以有catch子句和一个finally子句,这些子句会在关闭资源后执行。但是在实际开发中,尽量减少try模块中的内容。