class Book {
boolean CheckedOut = false;
Book (boolean checkOut) {
CheckedOut = checkOut;
}
void CheckIn() {
CheckedOut = false;
}
@Override
public void finalize() {
if (CheckedOut){
System.out.println("Error:checked out");
}
}

}public class hellodate {
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
    Book novel = new Book(true);
    novel.CheckIn();
    new Book(true);
    System.gc();//强制系统进行垃圾回收和调用finalize函数 
    }
} /* Output:
*///:~

解决方案 »

  1.   

    finalize本来就不保证什么时候调用。
    gc()只是建议GC,而不是强制gc
    就算gc了,算法发现剩余空间足够大,也不一定要finalize你的对象建议加个申请大量空间的操作,然后gc
      

  2.   

    // 重写此方法, 最好复制过来, 是 protected 而且还要PAO异常
    @Override  
    protected void finalize() throws Throwable {
    if (CheckedOut) {
    System.out.println("Error:checked out");
    }
    }