我的问题与另一个问题有关: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
关键字在这里有什么区别?
答案 0 :(得分:6)
无论何时创建新的类实例,第一个代码段都会创建Test类的新实例。因此无限递归和堆栈溢出。
require('flickity-imagesloaded')
第二个片段,因为此处变量是静态的,所以在初始化类时会创建类的实例。创建类的新实例时,没有无限递归。
Test test = new Test(); // creates an instance of Test which triggers
// initialization of all the instance variables,
// so Test buggy = new Test(); creates a second
// instance of your class, and initializes its
// instance variables, and so on...
答案 1 :(得分:2)
当类加载器首次加载Test类时,静态字段仅初始化一次。