多个静态类实例被创建时会发生什么?

3
如果我重新实例化一个静态类,之前分配的内存会发生什么?

4
请给我们展示你的代码。如果没有代码,这个问题就不太有意义。 - NPE
1
静态类在实例化方面与顶级类没有区别。之前分配的内存仍然分配给先前创建的对象,直到该对象被垃圾回收。 - JB Nizet
它将作为一个普通的类加载。我猜当你说静态类时,只是指在某个外部类中使用了static修饰符。 - Sudhanshu Umalkar
1
静态内部类与普通类没有任何区别。 - SLaks
你是指静态内部类吗? - vikingsteve
1个回答

4
只有嵌套类可以是static。嵌套static类的实例的行为与任何其他类的实例相同:
  • 只要有活动(即可访问)引用,实例就会保持存在;
  • 一旦它变得不可访问,它就有资格进行垃圾回收;
  • 在它变得有资格之后的某个时候,它将被垃圾回收。

如果您实际上是在询问一个static引用:

public static Object obj = object1;
public static void main(String[] args) {
  obj = object2;
}

它们的行为与任何其他引用一样。

在上面的代码中,一旦你将obj重新赋值为指向object2,这可能会使object1有资格进行垃圾回收,也可能不会,这完全取决于是否存在对它的存活引用。


更精确地说,只有嵌套类可以是静态的。内部类在定义上是非静态的。 - assylias
@assylias:好观点,谢谢。我总是忘记哪个是哪个。 - NPE
@JBNizet:好的,说得对。我表达不够准确。 - NPE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接