为什么在实例中创建非静态实例时会发生堆栈溢出错误?

Sib*_*tro -2 java stack-overflow

为什么在同一个类的实例中创建非静态实例时会发生堆栈溢出错误?

public class ObjectTest {
    ObjectTest instanceObj = new ObjectTest("Outside");

    public ObjectTest(String s) {
        System.out.println(s);
    }

    public static void main(String[] args) {
        ObjectTest localObj = new ObjectTest("Inside");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是通过以下修改可以解决问题:

static ObjectTest instanceObj = new ObjectTest("Outside");
Run Code Online (Sandbox Code Playgroud)

可以理解的是,在将新对象分配给instanceObj引用时,在第一种情况下发生循环依赖

谁能澄清整个事情?为什么静态引用循环依赖不会发生?

Nic*_*ick 6

instanceObj非静态时,用于ObjectTest创建另一个的构造函数ObjectTest创建另一个ObjectTest,等等无限制.当它是静态的时,只instanceObj为整个ObjectTest类创建一个...... 毕竟它静态的.:)当instanceObj是静态的并且ObjectTest创建它时,它已经有静态的instanceObj,它本身就是.它需要一些时间来习惯,它可能有助于在纸上完成它并确保你清楚static关键字的含义.