在“终结条件”一节中,作者想讨论的内容是finalize()的用法,为此举了一段代码为例。代码如下(注释行和测试代码省略):































作者在书中写到:所有的BOOK对象在被当作垃圾回收器前都应该被签入(check in),当在main方法中,由于程序员的错误,有一本书未被签入。要是没有finalize()来验证终结条件,将很难发现这种错误(《JAVA编程思想(第三版)第188页)
我们来看这段代码,作者认为程序输出了"error:有文件未被签入",所以证明finalize()的作用,但是我觉的用这段代码来证明作者的观点好象并不是很合适。我们能看到,代码中Book novel = new Book(true)一句,已经创建了对象的引用,因此无论是否调用checkIn(),System.gc()语句都不会对该对象进行收集。我们可以把novel.checkIn()一行注释掉,运行时会发现,即使没有checkIn,程序仍然没有输出任何信息。