Pan*_*kaj 6 java inner-classes
Outer outer = new Outer();
一个Object
的Outer
类是在堆中创建和参考变量指向它.
如果我在写作时就明白了
Outer.Inner inner=outer.new Inner();
Inner
类的对象在堆上创建并inner
指向它.在堆中,我们有两个独立的对象,它们包含自己的实例变量.
但如果我写
Outer.Inner inner=new Outer().new Inner();
仍然Object
会在堆上创建两个for for Outer
和other for Inner
.但参考,inner
只有Inner
Object's
成员可以访问.谁在指Object
堆外?如果它没有被任何引用引用,那么它应该有资格进行垃圾收集,这会影响其使用inner
.
Erw*_*idt 10
内部类包含对其外部类实例的隐藏引用.如果没有其他引用,那么隐藏引用会使外部类实例保持活动状态.
要查看此操作,请获取此源代码并进行编译:
public class Outer {
public class Inner {
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用java类检查工具javap
查看隐藏的引用:
$ javap -p Outer\$Inner
Compiled from "Outer.java"
public class Outer$Inner {
final Outer this$0;
public Outer$Inner(Outer);
}
Run Code Online (Sandbox Code Playgroud)
你会看到有一个名为this$0
type 的包范围隐藏引用Outer
- 这是我上面谈到的引用.
归档时间: |
|
查看次数: |
1082 次 |
最近记录: |