关于资源释放问题
以下是课件资源释放代码:
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rs = null;
}
前面已经使用里close()方法关闭了,为什么最后还要来个rs=null?为何不一开始就来个rs=null,这不是一句代码就解决了吗?
正在回答
同学你好,
1、这个把rs赋值为null后,以后再执行这个finally块儿的时候(rs没有再次被赋值的情况下),它就不需要再去执行if(rs!=null)里面的内容了。打个比方, 假如载有货物的货车需要交卸货费,如果这个车不是空的,那么我们调用方法去卸货,卸完货之后,人家就给了我们一个牌子,上边写了“空车”。那下次再走到这儿的时候,一看是“空车”,就不需要再去执行卸货的那一套流程了。这个给了一个“空车”牌子的过程就好比是rs=null的过程哦。 同学也可以理解为,关闭这流后,人家给了我们一个证明。证明已经关过了,再次经过这儿的时候,不需要再次关闭。
2、rs置为null后,也是为了可以把rs垃圾回收。
不知道老师是否理解对了同学的疑问,如果老师理解错了同学的疑问,还请同学再次描述一下。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1、首先rs=null并不是真正的关闭了流哦,要调用close()才是关闭了流,所以,close()方法还是需要调用的。
2、为什么要写rs=null
这里是因为,我们的代码是写到finally里的,finally代码块儿里的代码都是最后会去执行的,如果我们已经关掉了rs,我们就没有必要再去执行这段儿代码了。而怎样不让它执行这段儿代码呢?我们可以关闭后给它置为null,我们让它去判断一下是否为null,如果不为null就去调用关闭的代码,如果为null,说明我们有已经关闭了。则不必执行里边关闭的代码了。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 277 份
- 解答问题 4297 个
Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星