2012-11-03 69 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