黑马程序员技术交流社区

标题: IO异常处理问题 [打印本页]

作者: HM刘博    时间: 2013-3-25 14:50
标题: IO异常处理问题
本帖最后由 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流不还是不能关闭吗,那怎样才能让关闭语句执行呢                                


作者: 炉海佳    时间: 2013-3-25 15:05
哥们finally块中try块中if(fw!=null)    fw.close(); 你看清楚了 是fw不为空才关闭流,看到那个感叹号了没? 如果对象没有创建成功fw就是空  也就不用关了
作者: HM刘博    时间: 2013-3-25 15:40
炉海佳 发表于 2013-3-25 15:05
哥们finally块中try块中if(fw!=null)    fw.close(); 你看清楚了 是fw不为空才关闭流,看到那个感叹号了没 ...

我看到感叹号了,fw为空就不能执行关闭程序,可是关闭程序是一定要执行的啊
作者: 仉钰    时间: 2013-3-25 15:47
如果fw = new FileWriter("demo.txt");   抛出异常,被捕获到,对象不能建立   

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

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

明白,谢了兄弟
作者: HM刘博    时间: 2013-3-25 17:09
王龙涛 发表于 2013-3-25 16:29
(1)
        fw = new FileWriter("demo.txt");   抛出异常,流对象就没有产生,何谈关闭?
(2)

谢谢,明白了
作者: 范德农    时间: 2013-3-25 22:29
首先你要知道为什么要if(fw!=null)
                                        fw.close();  因为只有流对象存在,才需要关闭,既然fw = null了,流对象都不存在了,何谈关闭?没有流对象存在的话,还用close()不就浪费资源了么?另外




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2