黑马程序员技术交流社区
标题: 关于关闭资源的问题 [打印本页]
作者: 孙浩 时间: 2012-6-18 14:02
标题: 关于关闭资源的问题
曾经看到有个老师这样写资源关闭,
我的疑问是资源都关闭了( bufferedReader.close();),那这句 bufferedReader = null;还有没有必要写?另外,毕向东老师的视频里好像没有这样写过!
请指教!
public class BufferCopy {
public static void main(String[] args) {
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
bufferedReader = new BufferedReader(new FileReader("G:/a.txt"));
bufferedWriter = new BufferedWriter(new FileWriter("H:/a.txt"));
String lines = null;
while ((lines = bufferedReader.readLine()) != null) {
bufferedWriter.write(lines);
bufferedWriter.newLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (bufferedWriter != null) {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bufferedReader != null) {
try {
bufferedReader.close();
// bufferedReader = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
作者: 唐辉辉 时间: 2012-6-18 14:06
本帖最后由 唐辉辉 于 2012-6-18 14:10 编辑
没有必要写了。close方法已经释放了流缓冲区。恢复其初始化时的状态!
作者: 李海晓 时间: 2012-6-18 14:09
一般都会写
if(bufferedReader != null){
bufferedReader = null;
}
应为 bufferedReader.close();只是关闭了流,但bufferedReader是不为空的,
=null可以节省资源
作者: 田建 时间: 2012-6-18 14:11
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {}
这两句代码是为了增强健壮性,做的一个判断,若不为空,则需要关闭资源,如果为空,则不需要了哦!
作者: 孙浩 时间: 2012-6-18 14:29
各位的观点不太一致啊,都挺有道理的!不过那个是正确的呀?请高手指点!
作者: 车风波 时间: 2012-6-18 15:45
=null是让它不再引用堆内存中的对象,jvm的内存回收机制会把不再使用的对象当垃圾清理掉,这样就节约资源了。
作者: 黄奕豪 时间: 2012-6-18 18:07
=null好点吧,我做了个测试,在close后面加了一个打印原流的操作,发现流对象还是在的,这样如果要内存把流对象释放掉的话还要等程序结束!当然现在的机器,相信对这点小内存还是耗得起的,不加问题也不大!!加了最好!
作者: 孙浩 时间: 2012-6-18 22:17
谢谢各位!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |