子类如果覆盖了父类的finalizer,子类应该手工调用父类的finalizer,应该放在finally里,以确保子类finalize时出异常时,父类finalizer仍被调用
利用匿名类,终结外围实体(enclosing instance),外围实体在一个private instance中存储一个reference,指向终结函数守卫者(finalizer guardian),于是,finalizer guardian在外部实体存在时也存在,当guardian被终结时,它执行外围实体所期望的终结动作。
public class Foo{
private final object finalizerGuardian = new Object(){
protected void finalize() throws Throwable{
//终结外围实体
}
}
}
利用匿名类,终结外围实体(enclosing instance),外围实体在一个private instance中存储一个reference,指向终结函数守卫者(finalizer guardian),于是,finalizer guardian在外部实体存在时也存在,当guardian被终结时,它执行外围实体所期望的终结动作。
public class Foo{
private final object finalizerGuardian = new Object(){
protected void finalize() throws Throwable{
//终结外围实体
}
}
}
子类finalizer调用机制
本文探讨了在Java中如何正确地从子类中调用父类的finalizer方法,确保资源得到释放。通过使用匿名内部类创建一个finalizer守护者对象,在子类的finalizer中调用父类的finalizer,即使子类finalizer抛出异常也能保证父类的finalizer被执行。
1918

被折叠的 条评论
为什么被折叠?



