class  Book
{
     boolean  checkedout = false ;
     Book(boolean checkedout)
     {
        checkedout=checkedout;
     }
     void checkin()
     {
         checkedout=false;
     }
     public void finalize()
     {
         if(checkedout)
         {
             System.out.println("Error: checkedout");
         }
     }
  

 public class finalize
{
     public static void main(String []args)
     {  
          /*Book  novel = new Book(true);
          novel.checkin();*/
         
          new Book(true)/*.finalize()*/;
          System.gc();
          System.out.println("Program  is running here");
     }
}
为什么程序没有打印出Error: checkedout并且请答人详细介绍一下有关垃圾处理器和finalize()的内部关系

解决方案 »

  1.   

    Book(boolean checkedout)
    {
    this.checkedout=checkedout;//你本来的赋值语句是错误的.没有给this.checkout赋值
    }
      

  2.   

    你自己阅读一些Object类里面关于finalize的描述,我觉得说的比较清楚.
      

  3.   

    Book(boolean checkedout)
    {
      checkedout=checkedout; //这一句有问题
    }估计楼主的目的是给成员变量赋值,应该写成this.checkedout = checkedout;
    你写的相当于都是在引用方法的参数。没有给成员变量赋值
      

  4.   

    刚才忘了写this 了
    但是
    //  Book  novel = new Book(true); System.gc();此时没有调用 finalize();
    //new Book(true);System.gc();确调用 finalize();
    这是为什么啊
      

  5.   

    Book  novel = new Book(true); 
    此时,对象new Book并不是一个gabage为什么要回收呢
      

  6.   

    checkedout=checkedout;
    写成:
    this.checkedout=checkedout;
      

  7.   

    高手们:我刚刚学java,也是在看编程思想也是刚刚看到这个地方,我觉着这个帖子发得真的是太好了!感谢楼主啊!不过我才识学浅有个地方不太明白,希望高手指教。在原程序就是最上面那个帖子里,为什么执行后,会显示“Error: checked out ”呢,创建的对象没有调用finalize()这个方法阿?
      

  8.   

    调用System.gc()只是请求java虚拟机进行内存回收。但不是强制执行。
    我也是初学者 希望对搂主有帮助
      

  9.   

    这个程序可以输出Error: checkedout不过要按照上面的朋友说法构造函数该正确才行Turingwang(图灵王) :
    因为GC之前会调用这个对象的finalize()释放资源
    下次GC时才回收内存