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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄金龙 中级黑马   /  2013-1-26 09:31  /  1488 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄金龙 于 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");这里是初始化...求解疑惑

评分

参与人数 1技术分 +1 收起 理由
黄锦成 + 1 很多人应该都有这个疑惑

查看全部评分

7 个回复

倒序浏览
try是一个代码块,finally是一个代码块,你不在外面声明引用,你在finally内怎么使用这个变量

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1

查看全部评分

回复 使用道具 举报
还有,FileWriter fw;这样写是可以通过的,一般情况,我们都指向null,这样更明确
回复 使用道具 举报
本帖最后由 IC-月辰 于 2013-1-26 10:01 编辑

                FileWriter fw = null;

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

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1

查看全部评分

回复 使用道具 举报
首先解答你的问题,每一个变量在使用前都要进行声明,就是FileWriter fw,如果要使用必须进行赋值后才能使用。
你的代码FileWriter fw,第一个try里边的赋值,finally里边内容可以理解是3个平级的代码块,如果没在外边赋值初始化的话,
你在finally里使用fw是并未被赋值的,所以fw.close无法使用,造成错误。
另外毕老师解释的也很清楚了,把FileWriter声明在外边是为了finally里使用,如果你声明fw写在第一个try里边new的话那么finally里边也没法用了。
另外也可以仔细看看第18天-08的视频。

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1

查看全部评分

回复 使用道具 举报
柴乔军 发表于 2013-1-26 09:36
try是一个代码块,finally是一个代码块,你不在外面声明引用,你在finally内怎么使用这个变量 ...

你这样写过吗?
String s = null;

点评

这个可以有  发表于 2013-1-26 10:24
回复 使用道具 举报
IC-月辰 发表于 2013-1-26 09:46
FileWriter fw = null;

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

FileWriter fw;
String s ;
integer i ;
这里在桟内存不会有变量生成吗?
回复 使用道具 举报
黄金龙 发表于 2013-1-26 10:34
FileWriter fw;
String s ;
integer i ;

会有啊,只是没有指向而已
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马