我在运行java编程思想书上一个关于垃圾回收的例子的时候出现了一些疑问。(代码相当短,拜托请耐心看完)
public class TestTermination {
public static void main(String[] args) {
Book b1 = new Book(true) //******************************************
System.gc();
}
}
class Book {
boolean checkedout = false;
Book(boolean checkout) {
checkedout = checkout;
}
void CheckIn(){
checkedout = false;
}
protected void finalize(){
if(checkedout){
System.out.println("Error:checked out!");
}
}
}
理想的情况时会打印出"Error:checked out!",但是没有任何打印出来!!
如果把星号那段改为 new Book(true)就会打印出来"Error:checked out!"
我不明白这是怎么回事,难道有一个对象的引用的和没有引用的有什么区别?
如果有知道的,请回答我一下,为什么会出现这种情况?谢谢了!

解决方案 »

  1.   

    java编程思想我没看过,不过我帮你改出来了public class TestTermination {
    public static void main(String[] args) {
    Book b1 = new Book(true);// ******************************************
    b1 = null;
    System.gc();
    }
    }class Book {
    boolean checkedout = false; Book(boolean checkout) {
    checkedout = checkout;
    } void CheckIn() {
    checkedout = false;
    } protected void finalize() {
    if (checkedout) {
    System.out.println("Error:checked out!");
    }
    }
    }
      

  2.   

    如果一个对象在没有被使用的标志,则很快会被回收
    如直接的new  Book()或一楼的将引用设为null