黑马程序员技术交流社区
标题:
根本就不该犯的错误……
[打印本页]
作者:
王红霞
时间:
2012-7-19 23:49
标题:
根本就不该犯的错误……
本帖最后由 王红霞 于 2012-7-20 09:50 编辑
import java.io.*;
class FileCopy
{
public static void main(String[] args)
{
FileCopyed();
}
public static void FileCopyed()
{
FileReader fr=null;
FileWriter fw=null;
try
{
fr=new FileReader("Test3.java");
fw=new FileWriter("file_copy.txt");
char[] buffer=new char[1024];
int length=0;
while((length=fr.read(buffer))!=-1)
{
fw.write(buffer,0,length);
System.out.println(new String(buffer,0,length));
}
}
catch(IOException e)
{
throw new RuntimeException(e);
}
finally
{
if(fr!=null)
//两个程序的结果是一样的 。对
fr、fw的判空有什么意义
?既然下面的程序也可以成功运行,那是不是就是说不需要判空?
{
try
{
fr.close();
}
catch(IOException e)
{
throw new RuntimeException(e);
}
}
if(fw!=null)
{
try
{
fw.close();
}
catch(IOException e)
{
throw new RuntimeException(e);
}
}
}
}
}
------------------------------------------------------------------------------------------------------
import java.io.*;
class FileCopy
{
public static void main(String[] args)
{
FileCopyed();
}
public static void FileCopyed()
{
FileReader fr=null;
FileWriter fw=null;
try
{
fr=new FileReader("Test3.java");
fw=new FileWriter("file_copy.txt");
char[] buffer=new char[1024];
int length=0;
while((length=fr.read(buffer))!=-1)
{
fw.write(buffer,0,length);
System.out.println(new String(buffer,0,length));
}
}
catch(IOException e)
{
throw new RuntimeException(e);
}
finally
{
//没有判空
try
{
fr.close();
}
catch(IOException e)
{
throw new RuntimeException(e);
}
//没有判空
try
{
fw.close();
}
catch(IOException e)
{
throw new RuntimeException(e);
}
}
}
}
作者:
孙浩迪
时间:
2012-7-19 23:56
mport java.io.*;
class FileCopy
{
public static void main(String[] args)
{
FileCopyed();
}
public static void FileCopyed()
{
FileReader fr=null;
FileWriter fw=null;
try
{
fr=new FileReader("Test3.java");
fw=new FileWriter("file_copy.txt");
char[] buffer=new char[1024];
int length=0;
while((length=fr.read(buffer))!=-1)
{
fw.write(buffer,0,length);
System.out.println(new String(buffer,0,length));
}
}
catch(IOException e)
{
throw new RuntimeException(e);
}
finally
{
if(fr!=null)//两个程序的结果是一样的 。对fr、fw的判空有什么意义?既然下面的程序也可以成功运行,那是不是就是说不需要判空?
{
try
{
fr.close();
}
catch(IOException e)
{
throw new RuntimeException(e);
}
}
if(fw!=null)
{
try
{
fw.close();
}
catch(IOException e)
{
throw new RuntimeException(e);
}
}
}
}
}
代码的规范和严谨性, 如果你的输出流和输入流都=null了,那你还关闭流,就会报异常 , 所以判断一下,如果不!=null的话,就关闭。
作者:
刘笑
时间:
2012-7-20 00:07
如果Test3.java和file_copy.txt不存在,那么fr和fw就不存在,如果fr和fw不存在的话再调用close方法就会出现异常,所以必须判空
作者:
丁二跃
时间:
2012-7-20 00:17
判空是很有必要的。
如果构造输入流,或输出流时出现异常,并未构造成功,那么执行finally的时候,fr 和 fw 就是null
如果不判断是否为空就 执行 close 方法 ,那当 fr fw 为空时,就会产生空指针异常,所以正确的方法是先判断是否为null 不为null 的情况下才关闭。
你下面程序能正常运行是因为 创建输入 输出 没有异常,fr fw 为不为空。
fr=new FileReader("Test3.java");------》 fr=new FileReader("");
试试还正常不了?
作者:
王红霞
时间:
2012-7-20 09:07
丁二跃 发表于 2012-7-20 00:17
判空是很有必要的。
如果构造输入流,或输出流时出现异常,并未构造成功,那么执行finally的时候,fr 和 fw ...
嗯确实确实 没考虑到fr为空的时候 考虑不到位……
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2