オブジェクト、クラス、インタフェース |
オブジェクトがガベージコレクトする前に、実行時システムはfinalize()
メソッド を呼び出す。 主旨はfinalize()
がコレクトする前に、オープンファイルやオープンソケットのようなシステム資源を解放することである。クラスは、
finalize()
メソッドを定義して実装することにより、終了を行うことができる。finalize()
メソッドは次のように宣言される。このクラスは、作成された時にファイルを開く。protected void finalize() throws Throwable行儀よくするために、 OpenAFile クラスは終了時にそのファイルを閉じるべきである。 OpenAFile クラスのためにここに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); } } }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(); }
オブジェクト、クラス、インタフェース |