2012-11-03 31 views
1

为什么要我来初始化变量初始化的FileInputStream

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

当试图关闭文件

fin.close(); 
+0

where is fin.close()?你的'fin = new FileInputStream(f);'存在于某个IF/ELSE块吗?另外,为什么不写'FileInputStream fin = new FileInputStream(“C:/Users/NetBeansProjects/QuestionOne/input.txt”);' – Vikdor

+3

这是你的实际代码吗?我不认为这反映了你在做什么。 –

+0

你在哪里打电话fin.close? –

回答

3

我敢肯定,这是不完全是编译器生成相同的代码错误。几乎可以肯定的是,你在try-catch-finally块之外声明了你的变量,但是你在try块中初始化了它们,这意味着该变量可能不会在catch的上下文中被初始化,或者最终会在出现编译器错误的块处被初始化。

例如:

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也许是最好的办法是使用与资源尝试处理您的流收盘:

File f = new File("C:/Users/NetBeansProjects/QuestionOne/input.txt"); 
try(FileInputStream fin=new FileInputStream(f)) { 
    //some input stream handlung here 
}catch(IOException e){...} 
+0

的地方打个招呼,那是真的,我不知道那是原因!谢谢。 – InspiringProgramming

2

因为更多的可能是你正在使用此功能内的片段离子和内部函数变量不会自动初始化,因为它们如果它们是instance variables。如果fin = new FileInputStream(f);引发异常,并且我认为在finally语句中有fin.close();(但您没有输入完整的代码),编译器不知道fin的值是为了关闭它。

+0

谢谢!那就对了。 – InspiringProgramming