实例变量在堆栈上,对象在堆栈上,对象引用在堆栈上。对?但是,如果实例变量是对对象的引用怎么办?就像var c:

class clony implements Cloneable {

    clony c = new clony();

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

class tst2 {

    public static void main(String[] args) throws CloneNotSupportedException {
        clony j1 = new clony();
    }
}


如果继续进行堆,为什么会抛出并导致堆栈溢出错误?

最佳答案

您的引用c是类clony的字段。这意味着引用将存储在为clony对象分配的内存区域内的堆上。

由于clony无限构造自身,因此程序将引发堆栈溢出异常:在clony的构造函数中,您将创建一个新的clony对象,并将其分配给字段c:然后它将一次又一次地执行相同的操作。

关于java - 实例var引用一个对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42291723/

10-10 23:31