题目:编写具有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的不确定性。