当内部类非静态的时候:
class Test{
public static void main(String args[]) throws InterruptedException{
Outer out = new Outer();Outer.Inner in = out.new Inner();
String str = in.getName();
out=null;
System.gc();
Thread.sleep(10000);
}
}
class Outer{
class Inner{
private String name = "xxx";public String getName(){
return name;
}
}
protected void finalize(){
System.out.println(this+"被回收了");
}
}
测试结果:外部类对象没有被回收
当内部类静态的时候:
class Test{
public static void main(String args[]) throws InterruptedException{
Outer out = new Outer();Outer.Inner in = new Outer.Inner();
String str = in.getName();
out=null;
System.gc();
Thread.sleep(10000);
}
}
class Outer{
static class Inner{
private String name = "xxx";public String getName(){
return name;
}
}
protected void finalize(){
System.out.println(this+"被回收了");
}
}
测试结果:外部类对象被回收了