黑马程序员技术交流社区

标题: 求解一个IO的小疑问...... [打印本页]

作者: 黄金龙    时间: 2013-1-26 09:31
标题: 求解一个IO的小疑问......
本帖最后由 黄金龙 于 2013-1-26 12:17 编辑
  1. /*
  2. IO类 以及异常处理
  3. */
  4. import java.io.*;

  5. class  Demo03
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 FileWriter fw = null;//这里为什么要指向空呢.下面不是有个初始化
  10.                 try
  11.                 {
  12.                         fw = new FileWriter("fileWriter.txt");
  13.                         fw.write("fffffffffffffffff");
  14.                         
  15.                 }
  16.                 catch (IOException e)
  17.                 {
  18.                         
  19.                 }
  20.                 finally
  21.                 {
  22.                         try
  23.                         {
  24.                                 fw.close();
  25.                         }
  26.                         catch (IOException e)
  27.                         {        
  28.                                 sop(e.toString());
  29.                         }
  30.                 }
  31.                
  32.         }

  33.         public static void sop(Object obj)
  34.         {
  35.                 System.out.println(obj);
  36.         }
  37. }
复制代码
FileWriter fw;如果只写这样是编译不通过的,提示是未初始化变量...
fw = new FileWriter("fileWriter");这里是初始化...求解疑惑

作者: 柴乔军    时间: 2013-1-26 09:36
try是一个代码块,finally是一个代码块,你不在外面声明引用,你在finally内怎么使用这个变量
作者: 柴乔军    时间: 2013-1-26 09:38
还有,FileWriter fw;这样写是可以通过的,一般情况,我们都指向null,这样更明确
作者: 贾文泽    时间: 2013-1-26 09:46
本帖最后由 IC-月辰 于 2013-1-26 10:01 编辑

                FileWriter fw = null;

这句话只是在栈中声明一个引用变量,没有这句话下面try代码块中的fw从哪来啊
要是直接把  FileWriter fw=new FileWriter("fileWriter.txt"); 都放在try中进行初始化,那下面的finally代码块中的fw又没指向了,
所以就在外面声明引用变量,在try中初始化。OK

作者: 黑马王振宇    时间: 2013-1-26 09:56
首先解答你的问题,每一个变量在使用前都要进行声明,就是FileWriter fw,如果要使用必须进行赋值后才能使用。
你的代码FileWriter fw,第一个try里边的赋值,finally里边内容可以理解是3个平级的代码块,如果没在外边赋值初始化的话,
你在finally里使用fw是并未被赋值的,所以fw.close无法使用,造成错误。
另外毕老师解释的也很清楚了,把FileWriter声明在外边是为了finally里使用,如果你声明fw写在第一个try里边new的话那么finally里边也没法用了。
另外也可以仔细看看第18天-08的视频。
作者: 黄金龙    时间: 2013-1-26 10:18
柴乔军 发表于 2013-1-26 09:36
try是一个代码块,finally是一个代码块,你不在外面声明引用,你在finally内怎么使用这个变量 ...

你这样写过吗?
String s = null;
作者: 黄金龙    时间: 2013-1-26 10:34
IC-月辰 发表于 2013-1-26 09:46
FileWriter fw = null;

这句话只是在栈中声明一个引用变量,没有这句话下面try代码块中 ...

FileWriter fw;
String s ;
integer i ;
这里在桟内存不会有变量生成吗?
作者: 贾文泽    时间: 2013-1-26 13:25
黄金龙 发表于 2013-1-26 10:34
FileWriter fw;
String s ;
integer i ;

会有啊,只是没有指向而已




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