请教大家一个问题。
比如
FileInputStream fis = null;
fis = new FileInputStream("d:\\test.txt");
和
FileInputStream fis;
fis = new FileInputStream("d:\\test.txt");
(或者说FileInputStream fis= new FileInputStream("d:\\test.txt");)
Qustion:
1.其中第二种方式应该也是对的吧?
2.然后第一种方式的先声明fis 未null的好处是 防止系统把不为空的内存赋值给fis?
3能给我说明下,第二种方式会很不安全吗?
比如
FileInputStream fis = null;
fis = new FileInputStream("d:\\test.txt");
和
FileInputStream fis;
fis = new FileInputStream("d:\\test.txt");
(或者说FileInputStream fis= new FileInputStream("d:\\test.txt");)
Qustion:
1.其中第二种方式应该也是对的吧?
2.然后第一种方式的先声明fis 未null的好处是 防止系统把不为空的内存赋值给fis?
3能给我说明下,第二种方式会很不安全吗?
比如
FileInputStream fis;
if(true)
fis = new FileInputStream("d:\\test.txt");
fis.xxx//使用就会编译错误
只要存在if这种编译器不能确定fis一定被赋值了的在使用时会编译出错
2.第一种是为了层次分明。
FileInputStream fis = null; //在栈中声明对象
fis = new FileInputStream("d:\\test.txt");//在堆中实例化对象
FileInputStream fis;
int i = 1;
if(i==1)
fis = new FileInputStream("d:\\test.txt");
fis.close();
和
FileInputStream fis;
int i = 1;
if(i==1)
fis = new FileInputStream("d:\\test.txt");
else
fis = new FileInputStream("d:\\test.txt");
fis.close();
这是因为在IO操作要捕获IOException,在try{}catch 块要写finally{fis.close();}来确保资源的关闭,所以要把fis定义成全局变量定义到try{}catch块外边去,因为try{}catch相当于一个方法,里面是一个域,出了这个域finally{}就不认识了,所以要 FileInputStream fis = null;单独定义出来,避免资源关闭时发生错误
这分两种情况:
类对象成员变量:可以不=null 编译时自动赋予null值 即进行内存分配
本地对象成员变量:必须=null 否则编译出错解释一下:类对象成员变量 是类的成员变量,即可以用public,protected,private修饰的变量,本地对象成员变量 是方法里声明的变量第一种情况在使用这个类成员变量时,因为编译时已经赋予了null值,相当于初始化了;
第二种情况因为是使用时才初始化,即在用的地方或者是赋值的地方才初始化,这要求这个对象变量应该分配了内存空间;所以必须在声明对象时显示指定