Как JVM хранит ссылку на включающий класс внутри внутреннего класса? - PullRequest
0 голосов
/ 23 августа 2011

Имея следующий код:

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 Ответ

3 голосов
/ 23 августа 2011

Думайте о нестатическом внутреннем классе как о чем-то похожем на:

public class Main {

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

Где ссылка _outer установлена ​​во время строительства. На уровне GC экземпляры внешнего и внутреннего классов вообще не различаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...