Java 最终确定者,关闭文件和流

Java 最终确定者,关闭文件和流,java,effective-java,Java,Effective Java,在Joshua Bloch的书《有效Java》第7项第二版中,他建议避免使用finally语句,尤其是在关闭文件时,他说“依赖最终定稿人关闭文件是一个严重错误”。两页之后,他说,它是合法的两个用例之一是显式终止方法模式 Foo foo = new Foo(); try{ ///process foo } finally{ foo.terminate(); } 具有终止方法的类包括FileInputStream和FileOutputStream。那么这不意味着在finally语句

在Joshua Bloch的书《有效Java》第7项第二版中,他建议避免使用finally语句,尤其是在关闭文件时,他说“依赖最终定稿人关闭文件是一个严重错误”。两页之后,他说,它是合法的两个用例之一是显式终止方法模式

Foo foo = new Foo();
try{
    ///process foo
} finally{
    foo.terminate();
}
具有终止方法的类包括FileInputStream和FileOutputStream。那么这不意味着在finally语句中关闭一个文件吗

1) 约书亚·布洛赫的第7项是矛盾的吗


2) 是否需要终止方法模式?你不能在没有finally语句的情况下编写上面的代码吗?我想作者的意思是你应该在
try catch
中使用
finally
块代码(这不是终结器)来关闭/清理资源,而不是释放
finalize
方法(这是终结器)


有关终结器的更多信息,请查看

终结器!=最后,
InputStream
没有终止方法。可能您指的是
Closeable
接口中的
close()
方法。