题目:编写具有finalize方法的类,并在方法中打印消息。在main中为该类创建一个对象。试着解释这个程序的行为。
分析:大多数时候我们不需要编写finalize方法,因为jvm垃圾回收器已经帮我们做好了一切,我们什么时候需要它呢?如果我们的对象不是new获得的内存空间,或者调用了naive方法,在方法中用其他方式获得内存空间,我们需要finalize方法告诉编译器如何释放内存空间。
它的工作流程如下:一旦垃圾回收器准备释放对象的空间,先调用其finalize方法,在下一次垃圾回收动作发生的时候,才会真正的回收。
我们需要注意的是fianlize方法并不是析构方法,它可能永远不会被调用
package iteye; public class test { @Override public void finalize(){ System.out.println("start finalize "+this); } public static void main(String[] args) { test t=new test(); t=null; System.gc(); } }
运行之后我们发现时而又输出,时而没有,这就说明了finalize的不确定性。