编写一个具有finalize()方法的类,并在方法中打印出一个消息。在main()中为这个类创建一个对象,且让finalize()方法总能够被调用。
我是这样写的:
public class TestFinalize {
 public void finalize(){
  System.out.println("call finalize");
 }
public static void main(String[] args) {
TestFinalize tf = new Testfinalize();
  System.gc();
}
}
这样为什么finalize()不会被调用阿?
请多多指教

解决方案 »

  1.   

    finalize()是垃圾回收的时候才会调用的方法,System.gc()只是你建议JVM开始垃圾回收,其实JVM未必会进行垃圾回收。毕竟JVM知道什么时候才是垃圾回收的最佳时机。
      

  2.   

    楼上说的也对,但楼主的这个在你执行System.gc();  的时候,你创建的这个对象还有引用指向它,你叫系统怎么回收啊,你的tf还没有退出它的作用域,如果引用计数不是0的情况下,不可能考虑回收的。可以改成这样public class TestFinalize {
     public void finalize(){
      System.out.println("call finalize");
     }
    public static void main(String[] args) {
      new Testfinalize();
      System.gc();
    }
    }
      

  3.   

    在你调用System.gc()时,由new Finalize()产生的对象仍然由f所引用,所以并不会调用finalize()
    只有没用任何引用时,才由可能调用。修改如下,可达成你的要求public class Finalize {
     public void finalize(){
      System.out.println("call finalize");
     }
    public static void main(String[] args) {
    Finalize f = new Finalize();
             f = new Finalize();
      System.gc();
    }
    }