【发布时间】:2017-05-08 03:52:27
【问题描述】:
我的问题与另一个问题有关:How does creating a instance of class inside of the class itself works?
我创建了两个类如下:
class Test {
Test buggy = new Test();
public static void main (String[] args) {
Test test = new Test();
System.out.println("Done");
}
}
还有一个:
class Test {
static Test buggy = new Test();
public static void main (String[] args) {
Test test = new Test();
System.out.println("Done");
}
}
我不明白为什么第一个代码(没有静态变量)会出现堆栈溢出错误,但是当我将实例变量声明为静态(第二种情况)时,我没有收到任何错误。 static 关键字在这里有什么不同?
【问题讨论】:
-
在第一个代码中,您创建了一个 Test 实例,并在其中创建了另一个实例。这会创建一个无限循环。
-
在初始化
Test时,先了解一下会发生什么。初始化单个Test时会发生什么?它有一个变量buggy,它被初始化,它的类型是Test。这个Test也有一个buggy类型的变量Test,它也想被初始化。你猜怎么了?你现在有另一个变量buggy想要被初始化。这种情况会一直发生,直到您的Stack实例溢出Test。
标签: java