java中需要手动释放的资源常见的有以下两个:
-
流相关资源
流相关资源一般遵循:
a) 先开后关,先开的输入流,再开的输出流,通过读取输入流写入输出流中,那么应该先关输出流,再关输入流,但是一般关闭输入输出流操作都是在读写完成后的finally中执行的,所以即使先关输入流,再关输出流也不会任何问题,因为读写操作没有进行了。
b) 先关外层,再关内层。如
BufferedInputStream
包装了一个FileInputStream
,那么先关
BufferedInputStream
,再关FileInputStream
。但要注意的是由于一般处理流持有节点流引用,处理流都会在自己的close
方法中去关闭节点流,因此我们只要关闭外层的处理流即可,如果多此一举的关闭节点流反而会报错。如BufferedInputStream
包装了FileInputStream
,我们只要关闭BufferedInputStream
即可c) 只关处理流,不关节点流,原因见上述第二条
流相关文章参考:http://blog.csdn.net/u012250875/article/details/78341874
-
jdbc相关资源
Connection
,PrepareStatement
,ResultSet
三个资源。这三个资源的获取顺序是:先获得一个
jdbc
连接对象Connection
,再通过连接对象获得一个sql预处理对象PrepareStatement
,如果是查询的话最后还会通过PrepareStatement
对象获取一个结果集ResultSet
对象,关闭顺序与获取顺序正好相反。先关ResultSet
,再关PrepareStatement
,最后关Connection
。
正确的资源释放语句格式
try{
//io操作。
//out.flush();
}catch(XxxException e){
//异常处理
throw e;
}finally{
if(in != null){
in.close();
}
}