public class Constructor {
Constructor constructor = new Constructor();
// Constructor constructor ; // 1
// static Constructor constructor = new Constructor();//2
public Constructor() {
System.out.println("constructor");
}
public static void main(String[] args) {
Constructor c = new Constructor();
}
}
上面程序就会发生递归调用。
首先明确,类初始化时实例变量将会在构造函数中初始化
main函数中声明局部变量c ,并对其初始化,这时程序会在堆空间里为其申请空间并完成对内存空间赋值

本文探讨了Java中构造器递归调用的情况。当在构造函数中创建类的实例时,会导致堆内存中对象互相引用,形成递归。然而,注释掉特定变量声明可以避免这种情况。类变量的初始化在类加载后完成,因此不会引发递归。
670

被折叠的 条评论
为什么被折叠?



