JVM如何将链接存储到内部类中的封闭类?

时间:2011-08-23 15:30:47

标签: java jvm inner-classes

拥有以下代码:

public class Main  {
    private Main() {}

    class Test extends Main {
        {
            System.out.printf("This: %h\nEnclosed in: %h\n", 
                 this, Main.this); 
            System.out.printf("Main.this is instance of %s\n\n" , 
                 Main.this.getClass());
        }
    }

    public static strictfp void main(String... args) {
        new Main().new Test();
    }
}

以下是问题:

  1. 内存中JVM是否存储引用Main.this?
  2. 这个区域(见1)是否为普通的顶级类实例保留了内存?

1 个答案:

答案 0 :(得分:3)

将非静态内部类视为类似于:

public class Main {

  static class Test extends Main {
    private final Main _outer;
    ...
  }
}

在施工期间建立_outer参考。在GC级别,外部和内部类的实例根本没有区别。