Почему вложенный объект класса по-прежнему имеет доступ к атрибутам внешнего класса после установки для экземпляра внешнего класса значения NULL? - PullRequest
0 голосов
/ 20 января 2019

У меня есть этот код:

public class EnclosingClass {
    public int age; 
    public int height ; 
    class Job {
        public String dateBegin ; 
        public int yearsExperience;
        public void displayCompleteProfile() {
            System.out.println(toString()+" age : "+age+" height : "+height);
        }
        @Override
        public String toString() {
            return "Job [dateBegin=" + dateBegin + ", yearsExperience=" + yearsExperience + "]";
        }


    } 

    @Override
    public String toString() {
        return "EnclosingClass [age=" + age + ", height=" + height + "]";
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        EnclosingClass enClass = new EnclosingClass();
        enClass.age = 20; 
        enClass.height = 170;           
        EnclosingClass.Job job1 = enClass.new Job();
        job1.dateBegin = "12/12/2008";
        job1.yearsExperience = 5;

        job1.displayCompleteProfile();
        enClass = null;
        job1.displayCompleteProfile();

    }

}  

, и когда я выполняю код, я получаю такой результат:

Job [dateBegin = 12/12/2008, yearsExperience = 5] возраст: 20 лет рост: 170
Job [dateBegin = 12/12/2008, yearsExperience = 5] возраст: 20 лет рост: 170

Как получается мой вложенный объект класса job1 по-прежнему имеет доступ к атрибутам включенного экземпляра класса enClass даже после того, как я установил для объекта значение null?

1 Ответ

0 голосов
/ 20 января 2019

Если у вас есть вложенный класс, который не является статическим, все экземпляры этого класса будут автоматически содержать экземпляр внешнего класса, который его содержит.

В этом случае, даже после того, как вы установили enClass = null, все еще есть ссылка на него, удерживаемая job1. Поскольку эта ссылка существует, даже если вы больше не можете обращаться к ней напрямую, она не подходит для сборки мусора.

...