关于java对象的finalize()方法

来源:百度知道 编辑:UC知道 时间:2024/06/01 05:54:17
我写了一个测试程序,包括两个类,如下

1.Test类

public class Test{

protected void finalize(){
System.out.println("调用对象的finalize方法");
}

}
============================================================

2.Main类

public class Main{

public static void main(String...args){
Test test = new Test();
// System.gc();
}
}

书本上说finalize()方法会在JVM回收对象"之前"调用,可是我写的这个测试程序并没有在运行结果中打印"调用对象的finalize方法"的信息,也就是说程序结束的时候JVM没有调用Test对象的finalize方法.是我对这个方法的运行机制理解不到位还是说书本内容有误?可是当我在main方法中去掉注释的话,程序的运行结果就显示了那段打印的内容.谁能帮我解释一下其中的原由啊?谢谢了!
先谢谢两位的答复,但我还有一个疑问是,程序都运行结束了,对象还没有达到被销毁的条件,那什么时候才算达到被销毁的条件啊?

你的对象没有达到被销毁的条件
把对象的引用设成null以后就可以了
public class Main{

public static void main(String...args){
Test test = new Test();
test=null;
System.gc();
}
}
如果程序结束了的话对象自然也就不存在了
只要不是手动调用 Syetem.gc() 的话你就不能确定什么时候java虚拟机会自己调用垃圾收集器
其实java和c++不一样 对象的回收与销毁你自己根本不需要管
只管创建和使用就可以了 其他的交给java虚拟机去处理把`~

看看这个。你就明白啦

http://zhidao.baidu.com/question/73782435.html

------------------------------------------------------

程序运行结束,不会还有活着的对象的
请相信JAVA

有时候即使你调用了gc()也不一定会执行finalize,这要依据垃圾回收算法的具体实现而定

finalize方法是在垃圾回收前所做的,不过具体在什么时候做得看JAVA自己的了