4

Javaでは、クリーンアップ手順のように、jvmが終了したとき、またはクラスが破棄されたときに呼び出すためにオーバーライドできるメソッドがあったことを覚えていますか?私はそれがどこで呼ばれていたかを見つけることができないようです。誰もがそれが何と呼ばれているのか知っています、私はそれを見つけることができませんか?

4

2 に答える 2

10

JVMがを介して終了したときに呼び出されるシャットダウンフックを追加できますRuntime.addShutdownHook()

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        // ...
    }
});

ただし、JVMが異常終了した場合でも、シャットダウンフックの実行は保証されません。

@Kalebが指摘しているObject.finalize()ように、オブジェクトがガベージコレクションの対象となるときに呼び出されるオーバーロードを実行できます。JoshBlochがEffectiveJavaItem 7で指摘しているように、次のようになります。

ファイナライザーは予測不可能で、多くの場合危険であり、通常は不要です

少し低く続いて(Joshによる強調):

オブジェクトが到達不能になってからファイナライザーが実行されるまでには、任意の時間がかかる場合があります...ファイナライザーでタイムクリティカルなことは決して行わないでください。

クラス内のリソースをクリーンアップする必要がある場合は、closeに依存する代わりに、finallyブロックで実行するか、メソッド(または同様のもの)を実装しfinalize()ます。

于 2011-03-20T13:36:24.660 に答える
5

finalize()メソッドは、オブジェクトが破棄されたときに呼び出されます。

于 2011-03-20T13:31:00.447 に答える