Previous | Next | Trail Map | Writing Java Programs | オブジェクト、クラス、インタフェース


finalize() メソッドの書き方

オブジェクトがガベージコレクトする前に、実行時システムは finalize()メソッド を呼び出す。 主旨は finalize() がコレクトする前に、オープンファイルやオープンソケットのようなシステム資源を解放することである。

クラスは、 finalize() メソッドを定義して実装することにより、終了を行うことができる。 finalize() メソッドは次のように宣言される。

protected void finalize() throws Throwable

このクラスは、作成された時にファイルを開く。

class OpenAFile {
    FileInputStream aFile = null;
    OpenAFile(String filename) {
        try {
            aFile = new FileInputStream(filename);
        } catch (java.io.FileNotFoundException e) {
            System.err.println("Could not open file " + filename);
        }
    }
}

行儀よくするために、 OpenAFile クラスは終了時にそのファイルを閉じるべきである。 OpenAFile クラスのためにここに finalize()メソッド がある。

protected void finalize () throws Throwable {
    if (aFile != null) {
        aFile.close();
        aFile = null;
    }
}

finalize()メソッドは java.lang.Object クラスで宣言される。 したがって、クラスに finalize()メソッドを書く時、スーパークラスのメソッドをオーバーライドしている。メソッドのオーバーライド では、メソッドのオーバーライドの方法についてさらに説明する。

クラスのスーパークラスに finalize()メソッド がある場合、クリーンアップを実行した後に、おそらくクラスの finalize()メソッドが、スーパークラスのfinalize()メソッドを呼び出す。 これは、オブジェクトがスーパークラスから継承したオブジェクトを通じて気付かずに得たどんな資源でもクリーンアップする。

protected void finalize() throws Throwable {
    . . .
    // clean up code for this class here
    . . .
    super.finalize();
}


Previous | Next | Trail Map | Writing Java Programs | オブジェクト、クラス、インタフェース