1:finalize()的调用是随机的,当jvm判断内存不足时会调用这个方法!我们不知道jvm何时调用该方法!
2:标志位,用于判断何时进行垃圾回收了!

解决方案 »

  1.   

    为什么我去掉gcrun = true;时候一直会运行 System.out.println("Beginning to finalize after " + created + " chairs have been created");
      

  2.   

    gcrun = true;
    你将它去掉的话,gcrun的值一直是false,当jvm调用finalize方法的时候,if语句一直成立,当然会不断输出那一行啊,finalize方法在何时调用不确定的,调用次数也不确定,并不是只调用一次!
      

  3.   

    但是gcrun = true;没有将值返回给if哪!也就是说if调用时并不会知道gcrun已经变成true啦.我程序中并没有将值return回去哪!@
      

  4.   

    gcrun是Chair类的static成员,任何一个对象对它的修改都会造成它的值的改变,它相当于c中的全局变量啊,并不需要什么return的!
    楼主以前是学c的吧?
      

  5.   

    了解!谢谢.我没有注意是用static的.谢谢