为什么它要求我初始化变量fin
FileInputStream fin;
File f = new File("C:/Users/NetBeansProjects/QuestionOne/input.txt");
fin = new FileInputStream(f);
尝试关闭文件时
fin.close();
为什么它要求我初始化变量fin
FileInputStream fin;
File f = new File("C:/Users/NetBeansProjects/QuestionOne/input.txt");
fin = new FileInputStream(f);
尝试关闭文件时
fin.close();
我敢打赌,这与生成编译器错误的代码不完全相同。几乎可以肯定您在 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){...}
因为您更有可能在函数内部使用此代码段,并且内部函数变量不会自动初始化,如果它们是instance variables
. 如果fin = new FileInputStream(f);
抛出异常,并且我认为您有fin.close();
一个finally
语句(但您没有放置整个代码),编译器不知道哪个是fin
关闭它的值。