class Book{
    boolean checkedOut = false;
    Book(boolean checkOut){
        checkedOut = checkOut;
    }
    void checkIn(){
        checkedOut = false;
    }
    public void finalize(){
        if(checkedOut)
            System.out.println("error : checked out");
    }
}
public class Test3 {
    public static void main(String[] args){
        Book novel = new Book(true);
        novel.checkIn();
        new Book(true);
        System.gc();
        System.out.println("Test ="+novel.checkedOut);
    }
}本程序是thinking in java 中的一个例子,最后一句是我加上去的.
1.无最后一句显示结果是:error : checked out
2.加上最后一句是:
               Test = false
                error : checked out
3.将System.gc();注释掉 的显示结果是:
               Test = false
问题是第2句,为什么system在回收之后,但显示的打印却是先打印出Test = false
第3句,显示打印结果是Test = false 是不是因为当时的变量还没有被回收掉的原因啊,请教大家给我个解释,最好详细点,谢谢

解决方案 »

  1.   

    试了下,第2个问题我的执行结果和你不同!
    error : checked out
    Test =falseProcess completed.
      

  2.   

    System.gc()方法是告诉jvm尽快回收,并不保证会立即进行回收内存,只有当内存不够,jvm才会真正的回收,回收前会调用该对象的finalize()。
      

  3.   

    可已经调用了啊
    那不是写不写都一样啊2楼不是吧
    我用eclipse+jdk1.4结果Test =false
    error : checked out
      

  4.   

    hudingchen(努力不一定成功,放弃一定失败。) ( ) 信誉:100    Blog   加为好友  2007-04-27 12:49:10  得分: 0  
     
     
       System.gc()方法是告诉jvm尽快回收,并不保证会立即进行回收内存,只有当内存不够,jvm才会真正的回收,回收前会调用该对象的finalize()。
      
     
    ===============================================================
    用意。尽量在代码中不要手动调用;计算机比你聪明的多