黑马程序员技术交流社区

标题: BufferedReader处理异常时的问题 [打印本页]

作者: 侯丛政    时间: 2013-2-13 23:47
标题: BufferedReader处理异常时的问题
本帖最后由 侯丛政 于 2013-2-16 15:24 编辑

       public boolean login(String username, String password) {
                boolean flag = false;
                BufferedReader br = null;            // 在处理异常时为什么把 BufferedReader br 单独定义在外面, 并且置为null ?
                try {
                        br = new BufferedReader(new FileReader(file));

                        String line = null;
                        while ((line = br.readLine()) != null) {
                                String data = line;
                                String[] strArray = data.split("=");
                                if (strArray[0].equals(username)
                                                && strArray[1].equals(password)) {
                                        flag = true;
                                        break;
                                }
                        }
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        if (br != null) {
                                try {
                                        br.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                }
                return flag;
        }



作者: 黑马-周建    时间: 2013-2-14 00:38
但是,classpath环境变量尽量少用,因为,一旦配置了classpath,在我们执行class文件的时候,本来是要到当前目录下执行我们需要执行的文件,但是不小心,当前目录下的class文件被删/或不存在,那么它就会自动的执行classpath环境变量下的class文件,这就造成我们不想看到的结果。在java的JDK1.5后就不需要我们配置classpath环境变量了。这给我们减少了很多麻烦。

配置path环境变量的技巧:
我们配置path环境变量的时候,路径会改变,会造成路径改错。我们可以使用用户变量如:JAVA_HOME配置jdk路径,再把JAVA_HOME作内容配置在path环境变量中。

我们到别人的计算机上运行或编写一个java程序,别人机器上又没有装有jdk。我们也不需要去装一个jdk,更不需要配置path环境变量,这里我们可以使用set命令临时的配置一个环境变量。
如set path=jdk路径


作者: Gaara    时间: 2013-2-14 00:42
因为如果这么:BufferedReader br = new BufferedReader(new FileReader(file));  写的话在try代码块之中定义的变量br 外面是无法用到的。
所以必须在外面建立引用BufferedReader br = null;            
try中初始化  br = new BufferedReader(new FileReader(file));
这样才能做用于整个函数。(楼主可以试一下,不这么写会报错找不到变量br的)
而这个变量是为了读取东西加速的缓冲区。开始没读东西 当然就定义空了。也就是变量被存储的初始值。
作者: 罗海云    时间: 2013-2-14 09:26
因为在try里面的变量是局部变量,作用范围在定义它的最近的一个大括号内。如果是引用的话, 在try 的前面 定义: 类名 br = null;
在try里面给br赋值 。
作者: 郝强勇    时间: 2013-2-14 14:44
这个就是作用范围的问题了啊,其实并不难理解,我想到了这样一个小例子:
class Person{
        private info in = null;   //定义一个对象     
        public Person(info in){
            this.in = in  //接受这个对象
        }
}

我们都知道,在方法内的变量是局部变量,在方法外不能使用,但又非得在方法内进行赋值操作。为了整体都能访问到这个变量
所以就定义在方法外面作为成员变量,也不会失掉在方法内进行赋值操作的需求。
作者: 李大强    时间: 2013-2-16 10:22
首先,一看你这个问题就知道其实你是把“处理异常”和“局部变量”弄混了!

我要说的是,此处此段代码“ BufferedReader br = null;”所放的位置与“处理异常”没有任何关系!

它之所以那样做是因为如果变量“br”定义在了try{    }语句块,那么它就成了一个局部变量,此时它的作用范围就只能局限在此
语句块中,到了后面的finally {}块中,是根本无法访问到此变量的!


所以这完全是“局部”与“全局”的区别,与“异常处理”根本无关,所以你可要分清楚了啊!




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