finalize()并不会确保对象会被销毁,所以它不是析构函数。
public class Book {
public boolean checkedOut = false;
public Book(boolean checkedOut) {
this.checkedOut = checkedOut;
}
public void checkIn() {
checkedOut = false;
}
//重写finalize方法 \
@Override
protected void finalize() throws Throwable {
//校验checkedOut
if (checkedOut) {
System.out.println("校验出现了一次错误: Checked out ");
}
super.finalize();
}
}
public class TerminationCondition {
public static void main(String[] args) {
Book novel = new Book(true);
novel.checkIn();
//对checked进行了一次误操作,未进行签入
new Book(true);
//调用Gc 强制执行终结操作(finalize)
System.gc();
}
}
本例的终结条件是:所有的Book对象在被当作垃圾回收前都应该被签入(check in)。 在main()方法中可看到,一次误操作未对Book对象进行签入,导致有一本书没有被签入。此时我们可以使用finalize()验证终结条件。