比如说有个非静态的内部类,它的实例被引用,但是它的外部类实例没有被引用,垃圾回收会不会回收外部类的对象。

解决方案 »

  1.   

    package myjava;/**
     * Created by IntelliJ IDEA.
     * User: Administrator
     * Date: 2006-11-27
     * Time: 14:49:07
     * To change this template use File | Settings | File Templates.
     */
    public class TestFinalize {
        String id ;
        TestFinalize(String id){
            this.id =id;
            ti = new TestInner(id);
            System.out.println("TestFinalize constructs:"+id);
        }
        public void finalize(){
            System.out.println("TestFinalize finalize:" + id);
        }
        public class TestInner{
            String a="" ;
            TestInner(String id){
                a = id;
            }
            public void finalize(){
                System.out.println("TestInner finalize:" + a);
            }
        }
        public TestInner ti;
        public static void main(String[] args){
            TestFinalize tf1 = new TestFinalize("one");
            TestFinalize tf2 = new TestFinalize("two");
            TestInner ti = tf1.ti;
            tf1 =null;
            System.out.println("System.gc(); fisrt");
            System.gc();
            System.out.println(tf1);
            System.out.println(tf2);
            tf2 = null;
            System.out.println("System.gc(); second");
            System.gc();
        }
    }结果:
    TestFinalize constructs:one
    TestFinalize constructs:two
    System.gc(); fisrt
    null
    myjava.TestFinalize@19821f
    System.gc(); second
    TestInner finalize:two
    TestFinalize finalize:two好像没有被回收