我知道静态变量或方法在程序结束之前永远不会被垃圾收集,但静态嵌套类如何工作? 我在oracle网站上找到了这个引用,我知道顶级类不能是静态的,所以嵌套的静态类将表现为非静态类。但它并不能确保我是否也会以同样的方式收集垃圾。
静态嵌套类与其外部的实例成员进行交互 类(和其他类)就像任何其他顶级类一样。在 效果,静态嵌套类在行为上是一个顶级类 已经嵌套在另一个顶级类中以方便包装。
答案 0 :(得分:8)
当没有仍然引用它的GC根时,静态嵌套类的实例将有资格进行垃圾回收 - 就像任何其他对象一样。
当加载它的类加载器有资格进行垃圾收集时,类本身将有资格进行垃圾收集 - 就像任何其他类一样。
甚至内部类的行为方式相同 - 隐式引用是从内部类实例到一个封闭类的实例...所以内部的一个实例class可以“秘密地”防止封闭类的实例被垃圾收集,但不能反过来。 (显然,封闭类的实例可以引用内部类的实例,但只能显式引用。)