终结器守卫

4

我在Stack Overflow上看到了一个与finalizer guardian有关的例子,对此我有几个问题:

  1. 为什么我们需要创建一个Guardian对象?为什么不只是覆盖finalizer就可以了呢?(因为所有类都是Object类的子类)。

  2. Guardian对象是在什么时候创建的?我认为它是在类加载时创建的。

  3. 我没有理解guardian对象被创建的语法。一个函数被声明和变量声明一起使用。这种范式在Java中称为什么?

1个回答

4
  1. 正确地覆盖finalize()方法当然是可行的。我相信守护程序的技巧在于确保即使您重写了finalize()方法,也没有调用super.finalize(),守护程序在调用子类的finalizer之前会先调用父类的finalizer。

  2. 当封闭对象实例被创建时,守护对象只是一个实例变量。

  3. 那是匿名(内部)类。我相信大多数Java书籍或教程都有涵盖。尝试使用“java anonymous class”进行谷歌搜索将会给您提供很多资源,例如http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm


+1,但我会在第三点加上更多的解释,或者至少提供一个链接 - 因为原帖似乎会从中受益。 - ppeterka
嗯,我认为这在几乎所有Java初学者书籍中都有涉及。无论如何,我正在添加一个我通过谷歌找到的链接。 - Adrian Shum
@AdrianShum,所以基本上Guardian技巧只是为了解决那些不愿意合作的代码的安全问题 - Pacerier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接