程序如下:import java.io.*;public class TestInputStream {
public static void main(String[] args) {
int sum = 0;
FileInputStream f = null;
FileOutputStream out = null;

try {
f = new FileInputStream("E:/JAVA/s ailor/TestInputStream.java");
out = new FileOutputStream("E:/haiyuan.txt");
} catch(FileNotFoundException e) {
System.out.println("压根找不着");
}

try {
int b;
while((b = f.read()) != -1) {
System.out.print((char)b);
out.write(b);
sum++;
}
f.close();
System.out.println();
System.out.println(sum);
} catch(IOException e) {
System.out.println("文件读取错误");
}
}
}
问题是:把           FileInputStream f = null;
   FileOutputStream out = null;
        
         这两句改成: FileInputStream f;
   FileOutputStream out;
       其它不变。
      会出现一个错误说是f 和 out 没有初始化。
       可是明明这两句是出始化啊: 
        f = new FileInputStream("E:/JAVA/s ailor/TestInputStream.java");
       out = new FileOutputStream("E:/haiyuan.txt");
           请高手指教这是怎么回事!                     

解决方案 »

  1.   

    方法体中的局部变量,是必须被手动初始化为某个值的。这是原则。
    如果初始化出现在if ,try块中,是有可能不被执行的,编译器不会通过。但如果对同一变量的初始化同时出现在if和对应的else中,初始化一定可以进行,编译器会通过。try块同理,初始化同时出现在try,和各个catch中或finally中编译器也会通过。
      

  2.   

    类中定义的全局变量如果没有初始化是可以编译通过的,因为被赋予默认值。
    基本类型都有相应的默认值,int a=0,float f=0.0f,等,引用对象的默认值为null。在方法体内的局部变量需要显式设置初始值,否则编译不会通过,提示未初始化错误。 
      

  3.   

    同志,类属性是当类被编译是就已经被初始化了,对象属性,是需要自己手动初始化的!
    类属性的初始值是null 对象属性的初始值你赋什么值就是什么值,都说了让你搞清楚什么是类属性,什么是对象属性你还不听!
    连初始化和实例化都不懂!
      

  4.   

    import java.io.*;public class TestDateInputStream {
    public static void main(String[] args) throws Exception {
    FileOutputStream f ;
    f =  new FileOutputStream("E:/haiyuan.txt");
    }
    }
    请看这个程序,这个程序是对的。
    其实一楼的回答是对的
      

  5.   


    对象的属性可以不初始化,jvm自动初始化为0。new一个对象出来的时候,jvm会把整个对象所占的内存清零。所以对象的属性也会成为0、null、false之类。只有在方法中出现的变量,手动初始化才是必须的。另外类属性(static类型的属性)和对象属性(非static属性),自动初始化的时机不同。
    static类型的属性在类被jvm加载时被自动初始化,非static属性在对象建立的时候被jvm自动初始化。