黑马程序员技术交流社区
标题:
try代码块对象创建问题!!
[打印本页]
作者:
聂益飞
时间:
2013-3-27 00:38
标题:
try代码块对象创建问题!!
FileWriter fw=null;//1
try{
//若此处抛出异常,所以fw不能被初始化,所以1处fw要赋值null,但是就算此处出现异常
也会立刻被catch捕获并处理,程序依然会继续向下执行,执行到2处,所以fw依然会被初始化才对,
为何还要赋值null呢。。。。。。
System.out.println(10/0);
fw=new FileWriter("zp.java");//2
fw.write("123");
fw.flush();
fw.close();
}
catch(IOException e)
{
e.message();
}
复制代码
都是边边角角的小问题!!很难理解!
作者:
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