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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔九 中级黑马   /  2013-2-24 14:46  /  1460 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itcast;
import java.io.*;
public class IoDemo {
        public static void main(String[]args)throws IOException
        {
                FileWriter fw=null;
                try
                {
                         fw=new FileWriter("I:\\Demo.txt");
                        fw.write("jkdsfhgkja");
                }
                catch(IOException e)
                {
                        System.out.println(e.toString());
                }
                finally
                {
                        try
                        {
                                if(fw!=null)如果此处的fw为空了下面的关闭不就执行不到了吗?系统支援还是要被占用啊???这样写合适吗
                                        fw.close();
                                       
                        }
                        catch(IOException e)
                        {
                                System.out.println(e.toString());
                        }
                       
                }
        }

}

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
如果fw==null,说明这一步fw=new FileWriter("I:\\Demo.txt");失败了,既然没有建立流对象,也就不用关资源了

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. FileWriter fw = null;
  2.                 try {
  3.                         fw = new FileWriter("I:\\Demo.txt");
  4.                         fw.write("jkdsfhgkja");
  5.                 } catch (IOException e) {
  6.                         System.out.println(e.toString());
  7.                 } finally {
  8.                         //判断fw是为了避免空指针异常,fw没有指向就不需要关闭
  9.                         if (fw != null){
  10.                                 try {
  11.                                         fw.close();
  12.                                 } catch (IOException e) {
  13.                                         System.out.println(e.toString());
  14.                         }
  15.                                 fw = null; //最后加上这一步可以在关闭流后,fw置为空优化程序
  16.                    }
  17.                 }
  18.         }
复制代码
回复 使用道具 举报
  1. FileWriter fw = null;
  2.                 try {
  3.                         fw = new FileWriter("I:\\Demo.txt");
  4.                         fw.write("jkdsfhgkja");
  5.                 } catch (IOException e) {
  6.                         System.out.println(e.toString());
  7.                 } finally {
  8.                         //判断fw是为了避免空指针异常,fw没有指向就不需要关闭
  9.                         if (fw != null){
  10.                                 try {
  11.                                         fw.close();
  12.                                 } catch (IOException e) {
  13.                                         System.out.println(e.toString());
  14.                         }
  15.                                 fw = null; //最后加上这一步可以在关闭流后,fw置为空优化程序
  16.                    }
  17.                 }
  18.         }
复制代码
回复 使用道具 举报
我也不是很清楚这个问题,也比较纠结,我自己的理解是:
  1. try
  2.                 {
  3.                          fw=new FileWriter("I:\\Demo.txt");
  4.                         fw.write("jkdsfhgkja");//程序运行到此处没有问题,如果是null自然会触发异常处理,即下面的异常输出
  5.                 }
  6.                 catch(IOException e)
  7.                 {
  8.                         System.out.println(e.toString());
  9.                 }
  10.                 finally
  11.                 {
  12.                         try
  13.                         {       //最后程序执行到这时,fw对象出现问题,变成null了(我不清楚会是什么情况变成null),null的对象执行fw.close()时肯定会报错的,这里加上异常处理,同时不为null的判断,增强容错性,此时fw为空也没必要close了
  14.                                 if(fw!=null)
  15.                                         fw.close();
  16.                                        
  17.                         }
  18.                         catch(IOException e)
  19.                         {
  20.                                 System.out.println(e.toString());
  21.                         }
  22.                         
  23.                 }
复制代码
以上只是我的个人理解,比较模糊,希望有高手解答这个问题{:soso_e192:}
回复 使用道具 举报
fially{}中的内容就是一定要执行的
而在里面加if判断有两个原因:
1,其中的判断如果是空就相当于流没创建,如果此时还要调用流的close(),就会报空指针异了;
2,当然了如果流都没有创建,那还有这个必要关流吗
回复 使用道具 举报
二楼说的就挺好的了,如果fw为空了,那么只能是  fw=new FileWriter("I:\\Demo.txt");出错了。如果这一步出错了说明对象根本都没创建成,同时资源(文件)也没打开,所以谈不上资源泄露
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马