请教一道JAVA题,大虾指教~~

bobyisland 2005-10-08 09:00:01
编写一个具有finalize()方法的类,并在方法中打印出一个消息。在main()中为这个类创建一个对象,且让finalize()方法总能够被调用。
我是这样写的:
public class TestFinalize {
public void finalize(){
System.out.println("call finalize");
}
public static void main(String[] args) {
TestFinalize tf = new Testfinalize();
System.gc();
}
}
这样为什么finalize()不会被调用阿?
请多多指教
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobyisland 2005-10-08
  • 打赏
  • 举报
回复
呵呵,谢谢你们啦!明白啦~~~
believefym 2005-10-08
  • 打赏
  • 举报
回复
楼上几位说的不错
fndxm 2005-10-08
  • 打赏
  • 举报
回复
在你调用System.gc()时,由new Finalize()产生的对象仍然由f所引用,所以并不会调用finalize()
只有没用任何引用时,才由可能调用。修改如下,可达成你的要求

public class Finalize {
public void finalize(){
System.out.println("call finalize");
}
public static void main(String[] args) {
Finalize f = new Finalize();
f = new Finalize();
System.gc();
}
}
rumlee 2005-10-08
  • 打赏
  • 举报
回复
楼上说的也对,但楼主的这个在你执行System.gc(); 的时候,你创建的这个对象还有引用指向它,你叫系统怎么回收啊,你的tf还没有退出它的作用域,如果引用计数不是0的情况下,不可能考虑回收的。

可以改成这样

public class TestFinalize {
public void finalize(){
System.out.println("call finalize");
}
public static void main(String[] args) {
new Testfinalize();
System.gc();
}
}
pope_tju 2005-10-08
  • 打赏
  • 举报
回复
finalize()是垃圾回收的时候才会调用的方法,System.gc()只是你建议JVM开始垃圾回收,其实JVM未必会进行垃圾回收。毕竟JVM知道什么时候才是垃圾回收的最佳时机。

62,636

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧