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() を呼び出す必要があります。