内部类持有外部类的原理:
内部类和外部类编译完依然生成各自的class文件。
编译器为内部类添加一个外部类类型的成员变量。
编译器为内部类的构造方法添加一个参数,从而在构造时,给这个外部类类型的成员变量赋值。
资料:
原理
| 引用类型 | 何时回收 | 使用场景 |
|---|---|---|
| 强引用 | 只要引用链没有断开,强引用就不会断开。 | 对象必需 |
| 软引用引用 | 当内存空间不足时, GC会回收 | 非必需但有用 |
| 弱引用 | GC时被回收 | 非必需 比软引用更弱 |
| 虚引用 | 任何时候都可能被回收 | 跟踪对象被垃圾收集器回收的活动,起哨兵作用。必须和引用队列联合使用见下小节 |
当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列中。
程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。
资料:
Java的四种引用方式



