java初始化

FileInputStream fin ;
try {
fin = new FileInputStream("1.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DataInputStream din = new DataInputStream(fin);
那个fin不是后来赋值了吗。。。?为什么编译错误。
要求fin=null;

java语法规定,成员变量可以不初始化,变量将会根据定义的类型取类型的默认值,但是局部变量一定要初始化才能被使用!!!所以,你的代码只要把

FileInputStream fin;
改成
FileInputStream fin = null;
即可编译通过
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-22
你的这种写法是js写法,js对象定义时也会赋予初始值。
但是java不一样,java必须保证在“所有的分支逻辑”中对象一定要设上值,不然得初始化一个值。所以推荐的写法是 FileInputStream fin = null;
另外,两个建议,1 用 InputStream fin = null; 代替 FileInputStream fin = null;
2 “流” stream 的操作加上 finally 块, close掉stream。
第2个回答  2014-08-22
声明成员变量可以不给初始值,但声明局部变量时一定要赋初始值的
例如:变量类型 变量名 = 初始化的值 比如 String a= “”;
成员变量: private String name;
第3个回答  2014-08-22
你好,这是构造代码块,它优先于构造函数执行,给所有要创建对象进行初始化的。
构造函数是给指定的对象初始化的。

如果满意,请采纳,谢谢。
请采纳。
第4个回答  2014-08-22
因为fin = new FileInputStream("1.txt");这个可能抛出异常,文件不一定能找到
第5个回答  2014-08-22
因为fin = new FileInputStream("1.txt");是有可能抛出异常的,如果抛出异常,就会立刻执行catch中的代码,则fin就没有被初始化
相似回答