黑马程序员技术交流社区

标题: 关于关闭资源的问题 [打印本页]

作者: 孙浩    时间: 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