4

Stack Overflow に投稿されたファイナライザー ガーディアンの例を調べていましたが、これに関していくつか質問があります。

  1. Guardian オブジェクトを作成する必要があるのはなぜですか? ファイナライザの動作を単純にオーバーライドしないのはなぜですか? (すべてのクラスは Object クラスのサブクラスであるため)。

  2. ガーディアン オブジェクトはどの時点で作成されますか? クラスのロード中だと思います。

  3. 作成されるガーディアン オブジェクトの構文がわかりませんでした。関数は、変数の宣言とともに宣言されます。このパラダイムはJavaで何と呼ばれていますか?

4

1 に答える 1

4
  1. もちろん、finalize()を正しくオーバーライドすることはできます。ガーディアンのトリックは、オーバーライドされたfinalize()がsuper.finalize()を呼び出していない場合でも、ガーディアンが子クラスのファイナライザーの前に親のファイナライザーを呼び出していることを確認することだと思います。

  2. 囲んでいるオブジェクトインスタンスが作成されたとき。ガーディアンオブジェクトはインスタンス変数に他なりません

  3. それは匿名(内部)クラスです。これはほとんどのJavaの本やチュートリアルでカバーされていると思います。「javaanonymousclass」でGoogleを試してみると、http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htmなどの非常に多くのリソースが得られます。

于 2013-01-07T08:12:46.077 に答える