首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中"finalizer guardian“是如何工作的?

在java中"finalizer guardian“是如何工作的?
EN

Stack Overflow用户
提问于 2011-07-29 20:09:34
回答 1查看 2.6K关注 0票数 15

“终结器守护”是如何有效的Java的,第30页?

你用过它们吗?它解决了任何特定的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2011-07-29 20:20:17

解决了子类忘记调用父类的finalize方法的问题。此模式的工作方式是将一个带有覆盖的finalize的额外实例附加到您的超类。这样,如果超类超出作用域,附加的实例也会超出作用域,这将触发其finalize的执行,进而调用封闭类的finalize

下面是一个简短的代码片段,展示了卫士模式的实际应用:

代码语言:javascript
复制
public class Parent {

    public static void main(final String[] args) throws Exception {
        doIt();
        System.gc();
        Thread.sleep(5000); //  5 sec sleep
    }

    @SuppressWarnings("unused")
    private final Object guardian = new Object() {
        @Override protected void finalize() {
            doFinalize();
        }
    };

    private void doFinalize() {
        System.out.println("Finalize of class Parent");
    }

    public static void doIt() {
        Child c = new Child();
        System.out.println(c);
    }

}

class Child extends Parent {

    // Note, Child class does not call super.finalize() but the resources held by the
    // parent class will still get cleaned up, thanks to the guardian pattern
    @Override protected void finalize() {
        System.out.println("Finalize of class Child");
    }

}
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6872857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档