如下源程序:
import java.io.*;
import java.util.Vector;public class ListOfNumbers {
    PrintWriter out;
    private Vector<Integer> vectors;
    private static final int SIZE = 10;
    
    public static void main(String[] args) {
     new ListOfNumbers().writeList();
    }
    public ListOfNumbers () {
        vectors = new Vector<Integer>(SIZE);
        for (int i = 0; i < SIZE; i++) {
            vectors.addElement(new Integer(i));
        }
    }    public void writeList() {
        try {
        out = new PrintWriter(
                            new FileWriter("OutFile.txt"));
        } catch(IOException e) {
         e.printStackTrace();
        }        for (int i = 0; i < SIZE; i++) {
            out.println("Value at: " + i + " = " +
                         vectors.elementAt(i));
        }        out.close();
    }
}为什么讲第五行的语句 PrintWeiter out; 放在方法writeList()里面的首行进行编译时会说out引用没有被初始化呢?它不是在接下来的try语句中被初始化了吗?谢谢!

解决方案 »

  1.   

    在方法中定义变量必须初始化,在类中定义变量不用初始化 jvm会给我们初始化
      

  2.   

    局部变量必须进行初始化,对于field JVM自动帮你赋初值,应用类型初始化为null,原始数据类型有点多,找本书看看就好
      

  3.   

    up
    LZ可以直接写PrintWriter out = new PrintWriter( 
                                new FileWriter("OutFile.txt")); 
    反正你其他地方不用out
      

  4.   

    如果要放在writeList()里面的首行,因为你是在try里才赋值的,finally并不知道out的赋值,所以必须要给out赋初始值,即PrintWeiter out = null; 
    成员变量之所以没错是因为成员变量自动赋了初始值null