【问题标题】:What happens when multiple instances of static class are created?当创建多个静态类实例时会发生什么?
【发布时间】:2013-03-14 13:29:30
【问题描述】:

如果我重新实例化一个静态类,之前分配的内存会怎样?

【问题讨论】:

  • 请向我们展示您的代码。没有它,这个问题就没有多大意义。
  • 静态类在实例化方面与顶级类没有区别。之前分配的内存仍然分配给之前创建的对象,直到该对象被垃圾回收。
  • 它将作为普通类加载。我想当你的意思是静态类时,它只是你在一些带有静态修饰符的外部类中拥有它。
  • 静态内部类和普通类没有区别。
  • 你的意思是静态内部类吗?

标签: java class static


【解决方案1】:

只有嵌套类可以是static。嵌套 static 类的实例的行为类似于任何其他类的实例:

  • 只要有对它的实时(即可达)引用,实例就会一直存在;
  • 一旦它变得不可访问,它就有资格进行垃圾回收;
  • 在它符合条件后的某个时间点,它会被垃圾回收。

如果您实际上是在询问 static 参考:

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

这些行为与任何其他引用一样。

在上面的代码中,一旦您将obj 重新分配为指向object2,这可能会或可能不会使object1 符合垃圾回收的条件。这完全取决于是否有任何幸存的引用。

【讨论】:

  • 更准确地说,只有 nested 类可以是静态的。根据定义,内部类是非静态的。
  • @assylias:很好,谢谢。我总是忘记哪个是哪个。
  • @JBNizet:很公平。我的措辞草率。
猜你喜欢
  • 2014-03-02
  • 2015-09-16
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
  • 2016-11-23
相关资源
最近更新 更多