在Joshua Bloch的书“Effective Java”第7版第二版中,他建议避免使用finally语句特别是关闭文件,他说“依赖终结者关闭文件是一个严重的错误”。两页之后他说,它是合法的两个用例之一是显式终止方法模式
Foo foo = new Foo();
try{
///process foo
} finally{
foo.terminate();
}
具有终止方法的类包括FileInputStream和FileOutputStream。那么这不意味着在finally语句中关闭文件吗?
1)约书亚布洛赫的第7项是否矛盾?
2)是否需要终止方法模式?如果没有一个具有相同效果的finally语句,你难道不能编写上面的代码吗?
答案 0 :(得分:2)
我想作者意味着您应该在finally
中使用try-catch
块代码(这不是终结器)来关闭/清理您的资源,而不是在finalize
方法上缓解(这是终结者)。
有关终结器的详细信息,请查看When is the finalize() method called in Java?