EN JP CN

FIN.NOSUPER

FIN.NOSUPER

finalize() メソッドの実装は super.finalize() を呼び出す必要があります。FIN.* コードは、finalize() メソッドの実装に問題があることを報告します。このケースの場合、super.finalize() を呼び出さない finalize() メソッドの実装が存在しています。

脆弱性とリスク

スーパークラスインプリメンタがスーパークラスファイナライザをオーバーライドしたが、手動でスーパークラスファイナライザを呼び出すのを忘れた場合、スーパークラスファイナライザは呼び出されることはありません。すなわち、スーパークラスのリソースクリーンアップが実装されなくなり、リソースリークを生じます。

例 1

8  public class FIN_NOSUPER_Sample_1 {
9      /*
10     * no super.finalize() was called
11     */
12     public void finalize() {
13         System.err.println("finalized");
14     }
15 }

FIN.NOSUPER が、12 行目の 'finalize' メソッドの宣言に対して報告されています。finalize() メソッドの実装は super.finalize() を呼び出す必要があります。