任何人都可以解释为什么在最后一行中,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