finalize()
を使用してオブジェクトがクリーンアップされているかどうかについては、そのオブジェクトのコンストラクタが例外であるかどうかについての詳細はありますか。コンストラクタが例外をスローした後にfinalizeを呼び出すことはできますか?
このメソッドが呼び出されると、悪名高いものとして定義されます。マニュアルによると:
Javaプログラミング言語は、 任意のオブジェクトに対してfinalizeメソッドを呼び出しますどのスレッドを保証するものではありません。ただし、finalizeが呼び出されたスレッドは、finalizeが呼び出されたときにユーザーが表示できる同期ロックを保持しません。 finalizeメソッドによって 未キャッチ例外がスローされた場合、例外は が無視され、そのオブジェクトの終了が終了します。
http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize%28%29
私は、このようにfinalizeメソッドをトリガーすることができていませんでした。もし誰かが呼び出されないようにするか、あるいはコンストラクタがオブジェクトの初期化に失敗した後に呼び出されるケースがあるかどうかは誰でも知っていますか?
私は2回掃除してはならないオブジェクトを持っているので、これを尋ねます。例外をスローする前にクリーンアップするのが安全かどうか、またはfinalize()
のマーカーを有効にスキップして何もしないようにする必要があるかどうかを理解しようとしています。
+1私はそれはあなたに別のJVMが異なる動作をする可能性があるかどうかを確認する必要があります何かあると思います。 –
'finalize'を使うのは悪です。 –
@Peter JLSは非常に特殊ですが、[base]オブジェクトのコンストラクタが正常に完了すると、オブジェクトはファイナライズ可能です。 –