黑马程序员技术交流社区
标题: 问一个关于IO的问题。 [打印本页]
作者: 疯子的昨天 时间: 2013-12-31 21:50
标题: 问一个关于IO的问题。
最近看视频看到IO这部分。看到毕老师写的关于读取的一个循环。大概是这样的。
String Line =null;
while((line=bufr.readLine())!=null){
System.out.println(line);}
简写了。就是String Line =null;这句话 我看不太懂。为什么事先要定义LINE=NULL。有什么意义?
作者: 不愿一人 时间: 2013-12-31 22:20
我想说的是这是毕老师的编程习惯,很严谨,定义一个变量并且定义一个引用类型的变量,然后初始化这个对象,经常采用赋值为null的形式。
此外我做了一个实验
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.InputStreamReader;
- public class Test {
- public static void main(String[] args) throws Exception {
-
- File file = new File("src//hello.txt");
- BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
-
- String line ;
- System.out.println(line);
- while((line=br.readLine())!=null){
- System.out.println(line);
- }
- }
- }
复制代码
上面代码在编译时就不通过,提示The local variable line may not have been initialized,也就是上面指定义了一个String变量的引用,没有初始化就在下面调用这个变量。
如果将你贴上的源码改为String line;可以通过编译,原因是line=bufr.readLine()),这句话对line进行了赋值,也就是引用有了具体的指向。
ps,最好在编程中养成毕老师那样的习惯,定义一个引用类型的变量时就初始化(最起码给个null值也行),这样在以后的编程中就会少出现空指针的异常
作者: 淡淡de烟草味 时间: 2013-12-31 22:51
判断文件夹是否为空
作者: rainforestking 时间: 2013-12-31 23:26
简单地讲,就是要让编译器闭嘴!
作者: 天天学习 时间: 2014-1-1 09:41
这个问题涉及到了变量的变量的初始化问题
1, 成员变量的初始化,对于成员变量不管程序有没有进行显示的进行初始化,Java虚拟机 都会给它初始化默认值初始化默认规则为
1.1, 正数型(byte,short,int,long)的基本类型数据默认值为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, }
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |