我有以下代码:
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();
}
}
执行代码时,我得到以下结果:
工作[dateBegin = 12/12/2008,yearsExperience = 5]年龄:20身高:170
工作[dateBegin = 12/12/2008,yearsExperience = 5]年龄:20身高:170
即使我将对象设置为null,嵌套类对象 job1 为何仍然可以访问其封闭的类实例 enClass 属性?
答案 0 :(得分:2)
当您拥有一个非静态的嵌套类时,该类的所有实例将自动包含包含该类的外部类的实例。
在这种情况下,即使您设置了enClass = null
,仍然有job1
对其的引用。因为存在该引用,所以即使您不能再直接访问它,也无法进行垃圾回收。