正しいファイナライザの記述方法
ついでにJavaでの正しいファイナライザの記述方法を紹介しておく*1。
スーパークラスのファイナライザも呼び出す必要がある。
@Override protected void finalize() throws Thowable { try { // ファイナライザの中身 } finally { super.finalize(); } }
finalでないクラスでは、ファイナライザをオーバーライドされ、自分のファイナライザが呼び出されない恐れがあるため、自分のファイナライザを必ず呼び出すように、以下のファイナライザガーディアンと呼ばれるイディオムを使用するといい。
private final Object obj = new Object() { @Override protected void finalize() throws Throwable { // ファイナライザの中身 } };