任何人都可以解釋爲什麼在最後一行中,br不被識別爲變量?我甚至嘗試把try clause
中的br設置爲final
等。這與Java不支持關閉有什麼關係?我有99%的自信類似的代碼可以在C#中工作。Java中try catch塊中變量的「範圍」問題
private void loadCommands(String fileName) {
try {
final BufferedReader br = new BufferedReader(new FileReader(fileName));
while (br.ready()) {
actionList.add(CommandFactory.GetCommandFromText(this, br.readLine()));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) br.close(); //<-- This gives error. It doesn't
// know the br variable.
}
}
感謝
C#有一個'using'關鍵字,像一個for循環,可以:作爲一個簡單的例子,我會離開這裏這個你可以定義一個受隨後範圍限制的變量。 Java沒有。 – Yishai 2010-05-18 02:00:44
順便說一句:我不會在這裏做'e.printStackTrace()'。您的程序可能會繼續運行,並有可能爲空的操作列表。你不想那樣做。只需通過並讓您的應用程序退出或停止並顯示一條明確的錯誤消息,以便最終用戶可以採取相應的措施。 – BalusC 2010-05-18 02:32:34
我仍然不知道如何處理Java中的異常。在C#中,我會把它放在堆棧中,但如果我想這樣做,我必須在這個函數和任何調用這個函數的函數中放置一個throws聲明。它是一個PITA。 – 2010-05-18 02:47:06