实例变量在堆栈上,对象在堆栈上,对象引用在堆栈上。对?但是,如果实例变量是对对象的引用怎么办?就像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/