1

为什么它要求我初始化变量fin

FileInputStream fin;
File f = new File("C:/Users/NetBeansProjects/QuestionOne/input.txt");
fin = new FileInputStream(f);

尝试关闭文件时

fin.close();
4

2 回答 2

3

我敢打赌,这与生成编译器错误的代码不完全相同。几乎可以肯定您在 try-catch-finally 块之外声明了变量,但您在 try 块中对其进行了初始化,这意味着变量可能未在发生编译器错误的 catch 或 finally 块的上下文中初始化

例如:

FileInputStream fin;
try {
   File f = new File("C:/Users/NetBeansProjects/QuestionOne/input.txt");
   fin = new FileInputStream(f);
} finally {
   //you cannot be sure fin is initialized
   fin.close(); //compiler error
}

如果您使用的是 JDK 7,也许最好的方法是使用 try with resources 来处理您的流的关闭:

File f = new File("C:/Users/NetBeansProjects/QuestionOne/input.txt");
try(FileInputStream fin=new FileInputStream(f)) {
    //some input stream handlung here
}catch(IOException e){...} 
于 2012-11-03T07:10:36.990 回答
2

因为您更有可能在函数内部使用此代码段,并且内部函数变量不会自动初始化,如果它们是instance variables. 如果fin = new FileInputStream(f);抛出异常,并且我认为您有fin.close();一个finally语句(但您没有放置整个代码),编译器不知道哪个是fin关闭它的值。

于 2012-11-03T07:13:45.973 回答