黑马程序员技术交流社区

标题: try代码块对象创建问题!! [打印本页]

作者: 聂益飞    时间: 2013-3-27 00:38
标题: try代码块对象创建问题!!
  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. }
复制代码
都是边边角角的小问题!!很难理解!
作者: fclovejyy    时间: 2013-3-27 00:57
System.out.println(10/0);这句要是出了异常,在try中代码块中,这条语句之后的语句就不会执行了,直接到catch,也就意味着没有被初始化,所以在fw.close()的时候也得判断fw是不是为null;
作者: 高顺德    时间: 2013-3-27 01:05
System.out.println(10/0);这句出异常后你的catch根本捕获不到因为你捕获的只是io异常而不是ArithmeticException 根本执行不下去 你要把两个都捕获到

作者: 罗胜华    时间: 2013-3-27 01:24
本帖最后由 lsh12330ok 于 2013-3-27 01:26 编辑

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






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