我正在阅读《Java编程思想》第四版。我发现一个问题:当我在Eclipse IDE中测试源代码时,结果不同。希望有人能帮助我!
以下是源代码:
class Book {
boolean checkedOut = false;
Book(boolean checkOut) {
checkedOut = checkOut;
}
void checkIn() {
checkedOut = false;
}
protected void finalize() {
if(checkedOut)
System.out.println("Error:checked out");
//Normally,you'll also do this:
//super.finalize();//Call the base-class version
}
}
public class TerminationCondition {
public static void main(String[]args) {
Book novel=new Book(true);
//Proper cleanup:
novel.checkIn();
//Drop the reference,forget to clean up:
new Book(true);
new Book(true);
new Book(true);
//Force garbage collection & finalization:
System.gc();
}
}
书的结果:
Error: Checked out
The result of IDE
(nothing)
我使用的Java版本:
Java版本“1.7.0_51”
Java(TM) SE运行时环境(版本1.7.0_51-b13)
Java HotSpot(TM) 64位服务器虚拟机(版本24.51-b03,混合模式)
书中所述的Java版本是Java 5。finalize方法是否有变化?
System.gc
会触发垃圾回收,2:finalize
方法一定会被调用。有可能 JVM 终止阻止了gc
正常释放对象...或者其他原因。 - MadProgrammer