黑马程序员技术交流社区

标题: IO问题 [打印本页]

作者: 王得新    时间: 2012-10-13 16:36
标题: IO问题
本帖最后由 王得新 于 2012-10-14 17:51 编辑

一直没注意到这个问题,突然意识到的,求解释:
class  IoException
{
    public static void main(String[] args)
    {
        FileWriter file=null;//2.在这里先声明,这时file就就会作用于整个函数
        try{
            //FileWriter file=new FileWriter("demo.txt");//1 这样写是不对的,因为file实在try代码块中声明的,那么在finally的代码块中就访问不到,
                                                               //
也就是说file.close()关闭不了,得在步骤 2处先声明
            file=new FileWriter("demo.txt");
            file.write("aaaaaaaaaaaa");


        }catch(IOException e){
        
            System.out.println(e.toString());


        }finally{
        
            try{
                if(file!=null)//3 问题来了,既然file是在try块中进行实例化的,是不是file的作用范围就在try块中?那么在这里file是不是还是null,
                {              //
如果是null的话,那么file就没有实例化,没有实例化的file是不能调用close()的。
                                //(我想这里的file应该是实例化的,但是我就是理解不了,望黑马能解释下!)

                    file.close();
                }
            
            }catch(IOException e){
        
            System.out.println(e.toString());

            }
        }
        
        

    }
}

作者: 官仁杰    时间: 2012-10-13 16:55
本帖最后由 官仁杰 于 2012-10-13 16:59 编辑

file是一个引用,这个引用是在程序最外层声明的。然后在第一个try代码块,这个引用实例化了。file指向了某个具体的对象。这种指向不会随着try代码块的结束而结束。
你可以这么理解
i =0;
try{
i =1;
}
System.out.println(i);
这时候i是1,这是一个类比。
作者: 梁世喜    时间: 2012-10-13 18:13
注意变量的使用范围。
file已经在方法中声明,那么在它之后的代码对它的操作都是有效的。
所有try{}  中
   new FileWriter(文件路径)  若此处无异常,则file被实例化
作者: 刘伟平    时间: 2012-10-13 18:44
变量声明在哪里,作用范围就在哪里。
实例化的位置并不能左右变量的作用范围。




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