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