黑马程序员技术交流社区
标题:
关于关闭流的一个问题!求指点
[打印本页]
作者:
乔九
时间:
2013-2-24 14:46
标题:
关于关闭流的一个问题!求指点
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());
}
}
}
}
作者:
李挺
时间:
2013-2-24 14:59
如果fw==null,说明这一步fw=new FileWriter("I:\\Demo.txt");失败了,既然没有建立流对象,也就不用关资源了
作者:
游灿平
时间:
2013-2-24 15:02
FileWriter fw = null;
try {
fw = new FileWriter("I:\\Demo.txt");
fw.write("jkdsfhgkja");
} catch (IOException e) {
System.out.println(e.toString());
} finally {
//判断fw是为了避免空指针异常,fw没有指向就不需要关闭
if (fw != null){
try {
fw.close();
} catch (IOException e) {
System.out.println(e.toString());
}
fw = null; //最后加上这一步可以在关闭流后,fw置为空优化程序
}
}
}
复制代码
作者:
游灿平
时间:
2013-2-24 15:02
FileWriter fw = null;
try {
fw = new FileWriter("I:\\Demo.txt");
fw.write("jkdsfhgkja");
} catch (IOException e) {
System.out.println(e.toString());
} finally {
//判断fw是为了避免空指针异常,fw没有指向就不需要关闭
if (fw != null){
try {
fw.close();
} catch (IOException e) {
System.out.println(e.toString());
}
fw = null; //最后加上这一步可以在关闭流后,fw置为空优化程序
}
}
}
复制代码
作者:
曹春贵
时间:
2013-2-24 15:05
我也不是很清楚这个问题,也比较纠结,我自己的理解是:
try
{
fw=new FileWriter("I:\\Demo.txt");
fw.write("jkdsfhgkja");//程序运行到此处没有问题,如果是null自然会触发异常处理,即下面的异常输出
}
catch(IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{ //最后程序执行到这时,fw对象出现问题,变成null了(我不清楚会是什么情况变成null),null的对象执行fw.close()时肯定会报错的,这里加上异常处理,同时不为null的判断,增强容错性,此时fw为空也没必要close了
if(fw!=null)
fw.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
复制代码
以上只是我的个人理解,比较模糊,希望有高手解答这个问题{:soso_e192:}
作者:
胥文
时间:
2013-2-24 15:20
fially{}中的内容就是一定要执行的
而在里面加if判断有两个原因:
1,其中的判断如果是空就相当于流没创建,如果此时还要调用流的close(),就会报空指针异了;
2,当然了如果流都没有创建,那还有这个必要关流吗
作者:
王宝生
时间:
2013-2-24 20:35
二楼说的就挺好的了,如果fw为空了,那么只能是 fw=new FileWriter("I:\\Demo.txt");出错了。如果这一步出错了说明对象根本都没创建成,同时资源(文件)也没打开,所以谈不上资源泄露
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2