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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 聂益飞 高级黑马   /  2013-3-27 00:38  /  1446 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. FileWriter fw=null;//1
  2. try{
  3. //若此处抛出异常,所以fw不能被初始化,所以1处fw要赋值null,但是就算此处出现异常
  4. 也会立刻被catch捕获并处理,程序依然会继续向下执行,执行到2处,所以fw依然会被初始化才对,
  5. 为何还要赋值null呢。。。。。。
  6. System.out.println(10/0);
  7. fw=new FileWriter("zp.java");//2
  8. fw.write("123");
  9. fw.flush();
  10. fw.close();
  11. }
  12. catch(IOException e)
  13. {
  14.     e.message();
  15. }
复制代码
都是边边角角的小问题!!很难理解!

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

3 个回复

倒序浏览
System.out.println(10/0);这句要是出了异常,在try中代码块中,这条语句之后的语句就不会执行了,直接到catch,也就意味着没有被初始化,所以在fw.close()的时候也得判断fw是不是为null;
回复 使用道具 举报
System.out.println(10/0);这句出异常后你的catch根本捕获不到因为你捕获的只是io异常而不是ArithmeticException 根本执行不下去 你要把两个都捕获到
回复 使用道具 举报
本帖最后由 lsh12330ok 于 2013-3-27 01:26 编辑

这个问题还是引用变量类型的初始化问题:
FileWriter fw=null;
当你编译这个类的时候,实际上就在栈内存中存储了一个引用变量fw ,必须让fw指向一个null ,这就是引用变量需要初始化,而引用变量默认初始化的值就是null。
之后你的代码就抛出了一个算术异常,不能被0除,所以try语句就得不到执行,
准确的说:成员变量不需要你手动初始化,如果fw是成员变量,那么可以写成FileWriter fw;因为java虚拟机会自动初始化成员变量
          而当fw是局部变量的时候,创建类的时候,fw需要手动初始化:FileWriter fw = null;
明白不?

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马