/**
* 书本:《Thinking In Java》
* 功能:关于finalize()的调用
* 文件:TerminationCondition.java
* 时间:2014年10月6日17:49:09
* 作者:cutter_point
*/
package Lesson5InitializationAndCleanUp;
class Book
{
boolean checkedOut=false; //检验是否已经是知道的
Book(boolean checkOut) //构造函数
{
checkedOut=checkOut; //初始化
}
//这里定义一个方法
void checkIn()
{
checkedOut=false; //查找出来定义为假
}
//当程序结束被垃圾回收的时候,调用默认调用这个
protected void finalize() //继承自Object
{
if(checkedOut) //如果被检测出来了
{
System.out.println("错误:检测出来!");
}
else //没有检测出来
{
System.out.println("这个已经被签入");
}
}
}
//主函数
public class TerminationCondition
{
public static void main(String [] args)
{
Book novel=new Book(true); //这是还没有被回收的
novel.checkIn(); //改为false
new Book(true); //匿名构造一个对象
new Book(false);
System.gc(); //回收垃圾
}
}
//从结果上看,只出来了 这个被回收了! 和 错误:检测出来!
//说明这个只有匿名对象创建的时候才会调用finalize
输出结果:
这个已经被签入
错误:检测出来!