package thinking.in.java.demo; /*
* finalize的用途何在?
*
*本例的终止条件是L所有的Book对象在被当做垃圾回收前都应该被签入。但是在main方法中
*由于程序员的错误,有一本书没有被录入,要是没有finalize方法来验证终止条件,将很难发现这种缺陷
*注意:System.gc()用于强制进行终止动作,即使不这样做,多执行几次应用程序,分配大量的存储空间
*最终也会导致垃圾回收动作的执行
*
*/
class Book{
boolean checkout=false;
public Book(boolean checkout){
this.checkout=checkout;
}
void checkIn(){
checkout=false;
}
protected void finalize() throws Throwable{
super.finalize();
System.out.println("Error checkIn");
}
}
public class Testpage89 { /**
* @param args
*/
public static void main(String[] args) {
Book novel=new Book(true);
novel.checkIn();
new Book(true);
System.gc();
} }
参见java编程思想第四版:87-89页的内容