问题描述
packagenet.mindview.util;classBook{booleancheckedout=false;Book(booleancheckout){checkedout=checkout;}voidcheckIn(){checkedout=false;}protectedvoidfinalize(){if(checkedout)System.out.println("error:checkout");}}publicclasswushu{publicstaticvoidmain(String[]args){Booknovel=newBook(true);novel.checkIn();newBook(true);System.gc();}}这个题的运行机制是什么怎么最后得到结果error:checkout我听有人说Debug下能查看java程序的运行机制那在myeclipse中怎么用debug查找程序的运行机制
解决方案
解决方案二:
如果类定义了finalize方法,java垃圾收集器在收集垃圾该对象的时候会且仅会调用该方法一次,也就是说这个方法是jvm自动调用的如果在该方法的finalize方法中复活了该对象,在下次垃圾收集该对象的时候不会再调用该对象的finalize方法
解决方案三:
引用楼主myheartwillon的回复:
packagenet.mindview.util;classBook{booleancheckedout=false;Book(booleancheckout){checkedout=checkout;}voidcheckIn(){checkedout=false;}protectedvoidfinalize(){if(checkedout……
加个断点debug模式运行
解决方案四:
如果类定义了finalize方法,java垃圾收集器在收集垃圾该对象的时候会且仅会调用该方法一次,也就是说这个方法是jvm自动调用的如果在该方法的finalize方法中复活了该对象,在下次垃圾收集该对象的时候不会再调用该对象的finalize方法
解决方案五:
JAVA的垃圾收集器会自动检查到未被引用的对象,调用其finalize方法并将其标记为finalized,所以finalize就相当与C++的析构函数.第二次做垃圾收集时,如果标记了finalized的对象无引用则将其删除并释放空间.也就是如果在finalize方法里重新赋予其引用它就不会被删除.至于为什么会有这样的机制我也没完全理解.
解决方案六:
finalize方法不可靠,不要用。