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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM刘博 中级黑马   /  2013-3-25 14:50  /  1527 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM刘博 于 2013-3-25 17:09 编辑
  1. import java.io.*;

  2. class  FileWriterDemo2
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 FileWriter fw = null;
  7.                 try
  8.                 {
  9.                         [color=Red]fw = new FileWriter("demo.txt");[/color]                        
  10.                                                 fw.write("abcdefg");

  11.                 }
  12.                 catch (IOException e)
  13.                 {
  14.                         System.out.println("catch:"+e.toString());
  15.                 }
  16.                 finally
  17.                 {
  18.                         [color=Red]try
  19.                         {
  20.                                 if(fw!=null)
  21.                                         fw.close();                                
  22.                         }[/color]                        catch (IOException e)
  23.                         {
  24.                                 System.out.println(e.toString());
  25.                         }
  26.                         
  27.                 }               

  28.         }
  29. }
复制代码
上述程序是毕老师视频中的程序,有一点不明白,如果fw = new FileWriter("demo.txt");        抛出异常,被捕获到,对象不能建立,fw=null,那么finally块中try块中if(fw!=null)    fw.close();代码还是不能被执行到,IO流不还是不能关闭吗,那怎样才能让关闭语句执行呢                                

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

8 个回复

倒序浏览
哥们finally块中try块中if(fw!=null)    fw.close(); 你看清楚了 是fw不为空才关闭流,看到那个感叹号了没? 如果对象没有创建成功fw就是空  也就不用关了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
炉海佳 发表于 2013-3-25 15:05
哥们finally块中try块中if(fw!=null)    fw.close(); 你看清楚了 是fw不为空才关闭流,看到那个感叹号了没 ...

我看到感叹号了,fw为空就不能执行关闭程序,可是关闭程序是一定要执行的啊
回复 使用道具 举报
如果fw = new FileWriter("demo.txt");   抛出异常,被捕获到,对象不能建立   

对啊  流对象没有建立 何谈关闭呢
回复 使用道具 举报
上楼说了我想说的
回复 使用道具 举报
(1)
        fw = new FileWriter("demo.txt");   抛出异常,流对象就没有产生,何谈关闭?
(2)
        当FileWriter对象建立后,调用write方法,将字符"abcdefg"写入流中
        这时流中有数据,也就是fw!=null
        运行fw.close();关闭资源,并将数据刷新至目的文件中。
回复 使用道具 举报
仉钰 发表于 2013-3-25 15:47
如果fw = new FileWriter("demo.txt");   抛出异常,被捕获到,对象不能建立   

对啊  流对象没有建立 何 ...

明白,谢了兄弟
回复 使用道具 举报
王龙涛 发表于 2013-3-25 16:29
(1)
        fw = new FileWriter("demo.txt");   抛出异常,流对象就没有产生,何谈关闭?
(2)

谢谢,明白了
回复 使用道具 举报
首先你要知道为什么要if(fw!=null)
                                        fw.close();  因为只有流对象存在,才需要关闭,既然fw = null了,流对象都不存在了,何谈关闭?没有流对象存在的话,还用close()不就浪费资源了么?另外
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马