类似C++的OnDestroy()一样的,但是Java是在回收时调用。 因此只有垃圾收集时收集他时才会执行一些相关的操作——也就是你finalize()做的。
没有收集垃圾时不会执行的.
没有收集垃圾时不会执行的.
解决方案 »
- FileReader("")中的相对路径要怎么写啊
- 多人修改同一个java文件时,一般是如何注释的?
- 用ultraedit写.java的时候,如何不让string自动变成String?
- struts1.0和struts2.0 混合使用
- 图形图象设计
- 如何点击一个按钮后连接HTML文件
- 用PrintWriter向文件输出后为什么不能修改? 那位高手帮忙看一下?谢了
- 求Java APS API Version2
- jlist问题在线等待...
- 请问资源管理器是如何实现的?
- jb5如何用JDBC连接SQLSERVER7?
- 300分!谁帮我解决了这个问题http://expert.csdn.net/Expert/topic/1310/1310611.xml?temp=.502804,送300分。
可以在main()方法最后加上System.runFinalizerOnExit(true);来强制执行!
我在1.4.1中基本都能看到finalize被执行的结果(我输出的:))。
protected void finalize() throws Throwable
{
// super.finalize();
System.out.println("We're in TestFinalize finalize block!");
}
或者这样
protected void finalize() throws Throwable
{
System.out.println("We're in TestFinalize finalize block!");
super.finalize();
}你的代码我估计就是不能保证被调到的情况之一。:)
Test t=new Test();
t=null;
Runtime rt=Runtime.getRuntime();
rt.runFinalization();
这样就能调用Test类中的finalize方法了,各位说这样对不对啊?
调用finalize方法是不是可以这样认为:finalize方法除了在
1.对象被Garbage Collection时自动调用
2.程序退出时为每个对象调用一次finalize方法。
3.向以上那样显试的调用finalize方法
这三种方法以外,这个finalize方法不确定总是被调用的。这样理解对不对啊!如果是对的,我总算理解了这个finalize方法了!!!谢谢!立即给分哈!
finalize()确实是会在对象被收集为无用时被执行,但据我所知,在程序开始执行后,垃圾收集器并不是马上和程序同时启动,似乎要稍微有些延迟.比如,如果在程序中用循环的方式不停的产生空对象,垃圾回收器并不是在对象刚生成时就将其回收,不同的机器会有所不同,在我的机器上大概要到3000多个对象生成后才会开始回收.可能是你的程序太短,还没开始回收程序就结束了.
我是在<Thingking in Java>这本书中看到的以上内容,具体内容记不清了.这本书可以在网上下载.网址如下:
www.pcbookcn.com
这本书里讲得很详细,还有原代码