Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建静态类的多个实例时会发生什么?_Java_Class_Static - Fatal编程技术网

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

Java 创建静态类的多个实例时会发生什么?,java,class,static,Java,Class,Static,如果我重新实例化一个静态类,那么先前分配的内存会发生什么情况?只有嵌套类才能是静态的static。嵌套的静态类的实例的行为类似于任何其他类的实例: 只要存在对实例的实时(即可访问)引用,实例就会一直保留 一旦无法访问,它就有资格进行垃圾收集 在符合条件后的某个时刻,它将被垃圾收集 如果您实际上询问的是静态参考: public static Object obj = object1; public static void main(String[] args) { obj = object

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

只有嵌套类才能是静态的
static
。嵌套的
静态
类的实例的行为类似于任何其他类的实例:

  • 只要存在对实例的实时(即可访问)引用,实例就会一直保留
  • 一旦无法访问,它就有资格进行垃圾收集
  • 在符合条件后的某个时刻,它将被垃圾收集
如果您实际上询问的是
静态
参考:

public static Object obj = object1;
public static void main(String[] args) {
  obj = object2;
}
它们的行为类似于任何其他引用


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

请向我们展示您的代码。没有它,这个问题就没有多大意义。静态类与顶级类在实例化方面没有什么不同。先前分配的内存仍然分配给先前创建的对象,直到该对象被垃圾回收。它将作为普通类加载。我猜当你指的是静态类时,只是你在一些带有静态修饰符的外部类中有它。静态内部类与普通类没有区别。你是指静态内部类吗?更准确地说,只有嵌套类才能是静态的。内部类的定义是非静态的。@assylias:很好,谢谢。我总是忘记哪个是哪个。@JBNizet:很公平。我这方面措词马虎。