0

私が書いたクラスのメインメソッドで次のコードを試しました:

public static void main(String[] args){
    ...
    Object s = new Object();
    s.finalize();
    ...
}

しかし、日食は私にそのヒントを与えてくれます

The method finalize() from the type Object is not visible

タイプ Object には保護されたファイナライズされたメソッドがあり、それ自体で表示されるはずなので、私はとても混乱していますか? とにかく私は間違っていますか?

4

3 に答える 3

4

Object#finalize()protected方法です。あなたはそれをそのように呼ぶことはできません。クラスのprotectedメンバーは、その直接のサブクラスによって継承されます。参照時にその直接サブクラス内でアクセスできますがthis、そのクラスの参照を直接使用することはできません。

次のようになります。

class Demo {
    public void test() { 
        this.finalize();
    } 
}

ところで、なぜそれを呼び出したいのですか? このメソッドは、オブジェクトがメモリから完全に削除される直前に、JVM によって自動的に呼び出され、オブジェクトが使用しているすべてのリソースをクリアします。

于 2014-03-01T17:26:23.420 に答える
0

finalize()メソッドは、オブジェクトが破棄されようとしているときに呼び出されます。

カスタム クラスがある場合は、overrideこのメソッドを使用して何かを行うことができます。
このメソッドを直接呼び出すべきではありません。JVM のガベージ コレクターが自動的にそれを行います。また、プログラムの実行中にリソースをクリアすることは決してないため
、メソッドに依存してリソースをクリアしないでください。finalize()

于 2014-03-01T17:27:58.010 に答える
0

protectedオブジェクトと同じパッケージにいる場合にのみ、そのメソッドにアクセスできることを意味します。オブジェクトはパッケージ内にあります:java.lang.Objectあなたのプログラムはパッケージ内にありますcom.yourpackage.something==> パッケージからアクセスすることはできません

于 2014-03-01T17:28:36.290 に答える