2

我知道静态变量或方法在程序结束之前永远不会被垃圾收集,但是静态嵌套类是如何工作的?我在 oracle 网站上找到了这句话,我知道顶级类不能是静态的,因此嵌套的静态类将表现为非静态类。但它不能确保我是否也会以同样的方式收集垃圾。

静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,为了方便打包,它已经嵌套在另一个顶级类中。

4

1 回答 1

9

当没有仍然引用它的 GC 根时,静态嵌套类的实例将有资格进行垃圾回收 - 就像任何其他对象一样。

当加载它的类加载器有资格进行垃圾收集时,该类本身将有资格进行垃圾收集 - 就像任何其他类一样。

甚至内部类的行为方式也相同 - 隐式引用是内部类实例封闭类的实例......所以内部类的实例可以“秘密地”防止封闭类的实例被垃圾收集,但不是相反。(显然,封闭类的实例可以引用内部类的实例,但只能显式地引用。)

于 2013-07-09T16:16:28.987 回答