如何确保 finalize() 始终被调用(在 Java 练习中思考)
我正在慢慢地阅读Bruce Eckel的《Thinking in Java 4th Edition》,以下问题让我感到困惑:
使用 printize( ) 方法创建一个类,该方法用于打印消息。在 main( ) 中,创建类的一个对象。修改前面的练习,以便始终调用 finalize( )。
这是我编码的内容:
public class Horse {
boolean inStable;
Horse(boolean in){
inStable = in;
}
public void finalize(){
if (!inStable) System.out.print("Error: A horse is out of its stable!");
}
}
public class MainWindow {
public static void main(String[] args) {
Horse h = new Horse(false);
h = new Horse(true);
System.gc();
}
}
它将创建一个布尔值设置为 的新对象。现在,在方法中,它会检查是否为 。如果是,它将打印一条消息。Horse
inStable
false
finalize()
inStable
false
很遗憾,不会打印任何消息。由于条件的计算结果为 ,我的猜测是,它一开始就没有被调用。我已经多次运行该程序,并且只看到错误消息打印了几次。我的印象是,当调用时,垃圾回收器将收集任何未引用的对象。true
finalize()
System.gc()
谷歌搜索正确答案给了我这个链接,它提供了更详细,更复杂的代码。它使用我以前从未见过的方法,例如 、 、 和 。System.runFinalization()
Runtime.getRuntime()
System.runFinalizersOnExit()
有没有人能够让我更好地了解工作原理以及如何强制它运行,或者引导我完成解决方案代码中正在执行的操作?finalize()