我有一個帶有一個finalize()方法的伸縮構造函數的超類。爲了防止子類忘記調用super.finalize,我寫了一個終結者監護人(EJ Item 7)。Java終結者監護人似乎不工作?
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()被調用,並且我從子類的finalize方法得到SYSO,但從來沒有從超級定稿中得到一個。
我很困惑。我是否從根本上誤解了某些東西?
免責聲明:我意識到終結者是危險的,而不是明智的,等等。仍試圖理解這裏的問題。
在「它不工作」看到明顯的問題太趕上了。謝謝!! – Kal