class A
 {  private String name="du";
  
  public A(String name)
   {
     this.name=name;
     System.out.println(name);   }
    public void finalize()
   {System.out.println("object is going!");
    }
 }
  class B
  {
   public static void main(String[] args)
   {A a1=new A("p");
    A a2=new A("k");
    A a3=new A("d");
    A a4=new A("q");
    System.gc();
   }
}
运行结果是 
p k d q
finalize被调用了么?结果为什么不是下面的情况?
p k d q
object is going!
object is going!
object is going!
object is going!

解决方案 »

  1.   

    肯定是pkdq如果你写 a1.finalize()的话,会调用得
      

  2.   

     A a1 = new A("p");
            A a2 = new A("k");
            A a3 = new A("d");
            A a4 = new A("q");
            a1 = null;
            a2 = null;
            a3 = null;
            a4 = null;
            System.gc();
    因为还存在引用,对象不会释放的,这样可以
      

  3.   

    System.gc();
    申请垃圾回收机制运行,你可以申请,但是它不保证被执行,况且你的上面还没有产生垃圾对象,你所有的对象都有引用指向的,所以均没有调用那个方法
      

  4.   


    package com.test;class A 
    {  private String name="du"; 
      
      public A(String name) 
      { 
        this.name=name; 
        System.out.println(name);   } 
        public void finalize() 
      {
         System.out.println("object is going!"); 
      } 

      class Test
      { 
      public static void main(String[] args) 
      {
          new A("p"); 
          new A("k"); 
          new A("d"); 
          new A("q"); 
          System.gc(); 
      } 
    } 这样就可以被调用了。
      

  5.   

     finalize()这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
      

  6.   

    你说的是什么?
     Java。jsp吗?
    我的多学啦!
      

  7.   

    肯定是p k d q 
    原因为每个对象都没有调用相应的方法啊
      

  8.   

    是 p k d q,因为你并未通过类A的对象调用finalize() 方法。
      

  9.   

    System.gc(); 
    申请回收垃圾,但并不能保证立即回收
    什么时候回收是JVM决定的