FIN.NOSUPER

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

脆弱性とリスク

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

例 1

コピー
  public class FIN_NOSUPER_Sample_1 {
      /*
     * no super.finalize() was called
     */
     public void finalize() {
         System.err.println("finalized");
     }
 }

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