필자는 finalize() 메서드를 사용하여 텔레 스코핑 생성자가있는 수퍼 클래스를 사용하고 있습니다. super.finalize를 호출하는 것을 잊어 버리는 하위 클래스를 보호하기 위해 필자는 finalizer 보호자 (EJ 항목 7)를 이렇게 작성했습니다. 여기 Java finalizer 보호자가 작동하지 않는 것 같습니까?
public class Super {
public Super() {}
{
Object finalizerGuardian = new Object() {
@Override
protected void finalize() {
System.out.println("Finalizer guardian finalize");
Super.this.finalize();
}
};
}
protected void finalize() {
System.out.println("Super finalize");
}
}
은 샘플의 서브 클래스입니다 -
public class Sub extends Super {
public Sub() {}
protected void finalize() {
System.out.println("Sub finalize");
}
public static void main(String[] args)
throws InterruptedException {
if (1 == 1) {
Sub s1 = new Sub();
}
Runtime.getRuntime().gc();
Thread.sleep(10000);
}
}
S1 객체가 범위를 벗어나
이 종료 자 보호자의 마무리()가 호출되는, 나는 서브 클래스의 Finalize 메서드에서 SYSO를 얻을, 그러나 super의 finalize에서 하나를 결코 얻지 마라.나는 혼란 스럽다. 나는 근본적으로 무엇인가를 오해하고 있는가?
면책 조항 : finalizers는 위험하고 권장하지 않는다는 것을 알고 있습니다. 여기서도 문제를 이해하려고합니다.
명백한 문제를보기에는 너무 효과적입니다. 감사!! – Kal