如题。
我写了下面的代码,但是finalzie并没有被调用
//GabageDriver.java
class Gabage{
public void finalize(){
System.out.println("Gabage finalize invoked\n");
}
}public class GabageDriver{
public void finalize(){
System.out.println("GabageDriver finalize invoked\n");
}
public static void main(String[] args){
{
GabageDriver d = new GabageDriver();
Gabage g = new Gabage();
}
System.gc();
}
}

解决方案 »

  1.   

    public static void main(String[] args){
    {
    GabageDriver d = new GabageDriver();
    Gabage g = new Gabage();
                      g = null; // add this
    }
    System.gc();
    }
      

  2.   

    public class GabageDriver{
    public void finalize(){
    System.out.println("GabageDriver finalize invoked\n");
    }
    public static void main(String[] args){
    fun();
    System.gc();
    }
    public static void fun(){
    GabageDriver d = new GabageDriver();
    Gabage g = new Gabage();
    }
    }java中,函数内的大括号没有限制变量作用域的功能
      

  3.   

    谢谢楼上大虾,“函数内的大括号没有限制变量作用域的功能”这句话我不太理解,在JAVA中下面的代码是不能通过编译的:
    public class Test{
    public static void main(String args[]){
               {
    int i=0;
    }
    System.out.println(i);
    }
    }
    这说明大括号明显有限制变量作用域的功能呀,关键问题是,一个NEW出来的对象什么情况下可以说它成了垃圾?
      

  4.   

    class Gabage{
    public void finalize(){
    System.out.println("Gabage finalize invoked\n");
    }
    }public class GabageDriver{
    public void finalize(){
    System.out.println("GabageDriver finalize invoked\n");
    }
    public static void main(String[] args){
    {
     new GabageDriver();
    new Gabage();

    System.gc();
    }
    }
    当创建对象 而没有对象引用的时候 这个对象就会变成垃圾
    只有调用System.gc()时候  finalize()才会自动调用 而且你需要重写这个方法
    或者当内存不够时  它才会自动执行