#### 1.定义类 ResurrectionDemo

#### 2.定义类变量 id

#### 3.定义实例变量 myId

#### 4.定义类变量 ResurrectionDemo

#### 5.定义构造方法定义构造方法 ResurrectionDemo ()

#### 6.定义方法 finalize ()，其中调用父类的 finalize ()

#### 7.在清理方法 finalize ()中，将 this 指针赋给类变量 ResurrectionDemo

#### 8.添加 main()方法

#### 9.在 main()方法中循环创建 ResurrectionDemo 的实例

#### 10.调用 system 的 gc（）进行垃圾收集

#### 11.调用 system 的 System.runFinalization（）

#### 12.将类变量 ResurrectionDemo 设为 NULL

#### 13.调用 system 的 gc（）进行垃圾收集

#### 14.调用 system 的 System.runFinalization（）

#### 15.运行程序，观察输出结果

说明：运行 System.runFinalization ()方法可使垃圾收集器运行所有不可到达对象的 finalize()，但是这不意味着运行了该方法的对象就一定会被收集。同时需要注意的是虽然 ResurrectionDemo 对象在 finalize()中变成可达对象，但是下次回收时候，finalize()却不再被调用，因为 finalize 函数最多只调用一次。从程序输出结果也可印证这一点。

训练代码： ResurrectionDemo.java

// 演示对象的重生

class ResurrectionDemo

{

private static int id;

private int myId;

private static ResurrectionDemo rd;

ResurrectionDemo ()

{

myId = id++;

System.out.println ("Created object #" + myId);

}

protected void finalize () throws Throwable

{

System.out.println ("Finalized object #" + myId);

super.finalize ();

rd = this;

}

public static void main (String [] args)

{

new ResurrectionDemo ();

System.gc ();

System.runFinalization ();

System.out.println (rd);

rd = null;

System.gc ();

System.runFinalization ();

}

}