1

このAPIから直接:

捕捉されなかった例外が finalize メソッドによってスローされた場合、その例外は無視され、そのオブジェクトのファイナライズは終了します。

次のようにオーバーライドした後、 finalize() を明示的に呼び出そうとしました。

 public void finalize() // 
    {
        System.out.println("Garbage Collected");
        throw new RuntimeException();
    }

例外を取得しても明示的に呼び出すと、一方、暗黙的にそれを手放すと、期待どおりに例外を無視してうまくいきます。

public static void main (String []args) throws Exception
{
B b = new B();
b=null;// LINE 3

System.gc(); // It prints "Garbage Collected" and do not throw the exception
//if it was b.finalize() instead of System.gc() and line 3 was commented out it would print Garbage Collected and then would throw the exception.

なぜそれが起こるのですか?APIを使用する最初の方法でSystem.gc()は尊重され、明示的に呼び出された場合は尊重されないのはなぜですか?

4

1 に答える 1