A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙浩 中级黑马   /  2012-6-18 14:02  /  1722 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

曾经看到有个老师这样写资源关闭,
我的疑问是资源都关闭了(    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();

   }

  }

}

}

}


评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

7 个回复

正序浏览
孙浩 中级黑马 2012-6-18 22:17:42
8#
谢谢各位!
回复 使用道具 举报
=null好点吧,我做了个测试,在close后面加了一个打印原流的操作,发现流对象还是在的,这样如果要内存把流对象释放掉的话还要等程序结束!当然现在的机器,相信对这点小内存还是耗得起的,不加问题也不大!!加了最好!
回复 使用道具 举报
=null是让它不再引用堆内存中的对象,jvm的内存回收机制会把不再使用的对象当垃圾清理掉,这样就节约资源了。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
各位的观点不太一致啊,都挺有道理的!不过那个是正确的呀?请高手指点!
回复 使用道具 举报
if (bufferedReader != null) {


   try {


    bufferedReader.close();

   } catch (IOException e) {}

这两句代码是为了增强健壮性,做的一个判断,若不为空,则需要关闭资源,如果为空,则不需要了哦!
回复 使用道具 举报
一般都会写
if(bufferedReader != null){
bufferedReader = null;
}
应为 bufferedReader.close();只是关闭了流,但bufferedReader是不为空的,
=null可以节省资源

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 唐辉辉 于 2012-6-18 14:10 编辑

没有必要写了。close方法已经释放了流缓冲区。恢复其初始化时的状态!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马