1

JoshuaBlochの著書「EffectiveJava」の第7版では、特にファイルを閉じるためにfinallyステートメントを使用しないようにアドバイスしています。「ファイルを閉じるためにファイナライザーに依存するのは重大なエラーです」。2ページ後、彼は、それが正当である2つのユースケースの1つは、明示的な終了メソッドパターンにあると述べています。

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

終了メソッドを持つクラスには、FileInputStreamとFileOutputStreamが含まれます。つまり、finallyステートメントでファイルを閉じるということではないでしょうか。

1)Joshua Blochのアイテム7は矛盾していますか?

2)終了方法のパターンは必要ですか?同じ効果を持つfinallyステートメントなしで上記のコードを書くことはできませんか?

4

1 に答える 1

2

finally作成者は、メソッド (これはファイナライザーです) を解放するのではなく、ブロック コード (これはファイナライザーではありません) を使用try-catchしてリソースをクローズ/クリーンアップする必要があることを意味していたと思いますfinalize

ファイナライザーの詳細については、いつ Java で finalize() メソッドが呼び出されるかを確認してください。

于 2013-03-14T16:14:52.417 に答える