【发布时间】:2015-06-21 10:16:35
【问题描述】:
一本关于 Java 的初学者书籍中包含以下代码。这本书也很好地解释了异常,并且由于我了解异常是如何工作的,所以我对以下代码提出了一个问题。
由于某种原因,如果 FileWriter 类抛出异常,writer.close() 将不会被执行。因此,我认为关闭 writer 对象的最佳位置是在 finally 块中。甚至在此之前,我已经看到许多这样编写的代码,其中资源将在 try 块本身中关闭。我认为这样做没有任何意义。只有在没有异常的情况下才会关闭资源。
我错了吗?在java中关闭资源的最佳方法是什么?我们不应该编写如下代码吗?
public static void main(String[] args) {
try{
FileWriter writer = new FileWriter("file.txt");
writer.write("i am writing");
writer.close();
}catch(IOException e){
ex.printStackTrace();
}
}
【问题讨论】:
-
你说得对,最好在 finally 块中关闭 writer 对象,但是,由于该 writer 对象是 try catch 的一部分,因此无法在 finally 中访问它。为此,您需要在 try 块之外声明变量。
-
你是对的,正确的地方是最终的。当然,这可能会在 final 中引发另一个异常;所以有些人不喜欢那样。顺便说一句:现在,应该使用 try-with-resources
-
从 Java 7 开始你也可以使用 try-with-resources