帮忙看一下为何finalize不调用?

annkie 2011-11-14 04:10:43
class Book {
boolean CheckedOut = false;
Book (boolean checkOut) {
CheckedOut = checkOut;
}
void CheckIn() {
CheckedOut = false;
}
@Override
public void finalize() {
if (CheckedOut){
System.out.println("Error:checked out");
}
}

}

public class hellodate {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Book novel = new Book(true);
novel.CheckIn();
new Book(true);
System.gc();//强制系统进行垃圾回收和调用finalize函数
}
} /* Output:
*///:~
...全文
156 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
annkie 2011-11-14
  • 打赏
  • 举报
回复
谢谢,等会过来结贴。
仲兴轩 2011-11-14
  • 打赏
  • 举报
回复


// 重写此方法, 最好复制过来, 是 protected 而且还要PAO异常
@Override
protected void finalize() throws Throwable {
if (CheckedOut) {
System.out.println("Error:checked out");
}
}

clariones 2011-11-14
  • 打赏
  • 举报
回复
finalize本来就不保证什么时候调用。
gc()只是建议GC,而不是强制gc
就算gc了,算法发现剩余空间足够大,也不一定要finalize你的对象

建议加个申请大量空间的操作,然后gc

62,615

社区成员

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

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