在Java中内部类的定义与使用一般为成员内部类与匿名内部类,他们的对象都会隐式持有外部类对象的引用,影响外部类对象的回收。通过反编译我们可以来验证这个理论。
public class Outer {
private String name;
class Inner{
private String test;
}
}
Outer是一个普通的类,它有一个内部类Inner。
反编译后的代码
class Outer$Inner
{
private String test;
final Outer this$0;
Outer$Inner()
{
this.this$0 = Outer.this;
super();
}
}
可以清楚的发现,内部类的属性中有这个外部类,并且在内部类的构造函数中有这个外部类属性的初始化。