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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疯子的昨天 中级黑马   /  2013-12-31 21:50  /  1025 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近看视频看到IO这部分。看到毕老师写的关于读取的一个循环。大概是这样的。
String Line =null;
while((line=bufr.readLine())!=null){
System.out.println(line);}
简写了。就是String Line =null;这句话 我看不太懂。为什么事先要定义LINE=NULL。有什么意义?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 新年快乐同学~

查看全部评分

5 个回复

倒序浏览
我想说的是这是毕老师的编程习惯,很严谨,定义一个变量并且定义一个引用类型的变量,然后初始化这个对象,经常采用赋值为null的形式。
此外我做了一个实验
  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.InputStreamReader;


  6. public class Test {
  7.         public static void main(String[] args) throws Exception {
  8.                
  9.                 File file = new File("src//hello.txt");
  10.                 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
  11.                
  12.                 String line ;
  13.                 System.out.println(line);
  14.                 while((line=br.readLine())!=null){
  15.                         System.out.println(line);
  16.                 }
  17.         }

  18. }
复制代码

上面代码在编译时就不通过,提示The local variable line may not have been initialized,也就是上面指定义了一个String变量的引用,没有初始化就在下面调用这个变量。
如果将你贴上的源码改为String line;可以通过编译,原因是line=bufr.readLine()),这句话对line进行了赋值,也就是引用有了具体的指向。
ps,最好在编程中养成毕老师那样的习惯,定义一个引用类型的变量时就初始化(最起码给个null值也行),这样在以后的编程中就会少出现空指针的异常

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!新年快乐同学~

查看全部评分

回复 使用道具 举报 1 0
判断文件夹是否为空
回复 使用道具 举报
简单地讲,就是要让编译器闭嘴!

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 骚年,咱能低调一点吗?对了,新年快乐同学.

查看全部评分

回复 使用道具 举报
这个问题涉及到了变量的变量的初始化问题
1, 成员变量的初始化,对于成员变量不管程序有没有进行显示的进行初始化,Java虚拟机 都会给它初始化默认值初始化默认规则为
1.1,       正数型(byteshortintlong)的基本类型数据默认值为0
1.2,       单精度浮点型(float)的基本类型变量默认值为0.0f
1.3,       双精度浮点型(double)的基本类型变量默认值为0.0d
1.4,       字符型(char)的基本类型变量默认值为“\u0000
1.5,       布尔型基本类型变量默认值为false
1.6,       引用类型变量的默认值为null
1.7,       数组引用类型的变量默认值为null,创建数组变量的实例后如果没有显示的为每个元素赋值,Java会把每个元素初始化为其相应类型的默认值
2, 局部变量的初始化,
2.1,       局部变量声明之后Java虚拟机就不会给它初始化默认值,因此局部变量必须经过显示的初始化后才能使用它,如果编译器确认局部变量在使用之前没有被初始化,编译器会报错。
2.2,       局部变量没有初始化,并且在方法中一直没有使用,则编译和运行都会通过。
3, String line =null,这句话被定义在了main方法内部,属于局部变量,因此编译器认为
可能是程序员忘记了初始化,因此报错提醒要对局部变量初始化后再使用

1,    public class Test {
2,            public staticvoid main(String[] args) throws Exception {
3,                  
4,                   File file = new File("src//hello.txt");
5,                   BufferedReader br = new BufferedReader(new InputStreamReader(newFileInputStream(file)));
6,                  
7,                   String line ;
8,                   System.out.println(line);
9,                   while((line=br.readLine())!=null){
10,                        System.out.println(line);
11,                }
12,         }
13,  
14, }
回复 使用道具 举报
本帖最后由 高正新 于 2014-1-1 16:55 编辑

这个line相当于一个缓冲区,每次用这个line存放读取到的数据。
为什么String line = null,这就是定义变量的习惯了,你在方法里定义一个变量,给它赋初值。对于String,默认值是null,所以就定义Null。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马