【发布时间】:2011-10-04 17:56:42
【问题描述】:
大多数时候,我看到 finally 块的唯一用途是
FileInputStream f;
try{
f= new FileInputStream("sample.txt");
//something that uses f and sometimes throws an exception
}
catch(IOException ex){
/* Handle it somehow */
}
finally{
f.close();
}
我的问题是,如果 f 的作用域以封闭块结束,为什么我们需要在 finally 中关闭它?
【问题讨论】:
-
在您的情况下,
f的范围不会以 try-block 结束 -
@Oli Charlesworth:这显然是一个可读的例子。
-
创建文件引用不会抛出异常(或创建文件句柄),以备将来参考。
-
FWIW,在 Java 7 中,您可以使用 try-with-resources 构造:download.oracle.com/javase/tutorial/essential/exceptions/…