finalize()の実行中に例外がスローされた場合はどうなりますか?スタックは通常のように巻き戻されますか?finalize()を続行し、例外を無視しますか?finalize()を停止し、オブジェクトのGCを続行しますか?または、他の何か?
finalize()の使用に関するガイドラインを探しているわけではありません。それを説明するページがたくさんあります。
Object#finalize() javadocから:
finalizeメソッドによってスローされた例外により、このオブジェクトのファイナライズは停止されますが、それ以外の場合は無視されます。
ファイナライザーを作成する正当な理由があると仮定して、ファイナライザーをコーディングする正しい方法は次のとおりです。
protected void finalize() throws Throwable
{
try
{
// my finalization code
}
finally
{
super.finalize();
}
}
例外がスローされた場合、finalizeの呼び出しは終了し、次回は呼び出されませんが、オブジェクトはメモリからGCされます。