终结者,关闭文件和流

时间:2013-03-14 16:08:21

标签: java effective-java

在Joshua Bloch的书“Effective Java”第7版第二版中,他建议避免使用finally语句特别是关闭文件,他说“依赖终结者关闭文件是一个严重的错误”。两页之后他说,它是合法的两个用例之一是显式终止方法模式

Foo foo = new Foo();
try{
    ///process foo
} finally{
    foo.terminate();
}

具有终止方法的类包括FileInputStream和FileOutputStream。那么这不意味着在finally语句中关闭文件吗?

1)约书亚布洛赫的第7项是否矛盾?

2)是否需要终止方法模式?如果没有一个具有相同效果的finally语句,你难道不能编写上面的代码吗?

1 个答案:

答案 0 :(得分:2)

我想作者意味着您应该在finally中使用try-catch块代码(这不是终结器)来关闭/清理您的资源,而不是在finalize方法上缓解(这是终结者)。

有关终结器的详细信息,请查看When is the finalize() method called in Java?