Java 引用对象的实例变量

Java 引用对象的实例变量,java,clone,heap-memory,stack-memory,cloneable,Java,Clone,Heap Memory,Stack Memory,Cloneable,实例变量在堆栈上,对象在堆栈上,对象引用在堆栈上。对吗?但如果一个实例变量是对一个对象的引用呢?与var c类似: class clony implements Cloneable { clony c = new clony(); @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } class tst2

实例变量在堆栈上,对象在堆栈上,对象引用在堆栈上。对吗?但如果一个实例变量是对一个对象的引用呢?与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();
    }
}

如果它进入堆,为什么会抛出堆栈溢出错误?

这是因为堆栈还用于跟踪方法调用。每次调用一个方法(在本例中是类的默认构造函数)时,都会为此向堆栈中添加某些信息。当你有无限递归(就像你的构造函数一样)时,它会填满堆栈PDQ。

这是因为堆栈也被用来跟踪方法调用。每次调用一个方法(在本例中是类的默认构造函数)时,都会为此向堆栈中添加某些信息。当你有无限递归时(就像你的构造函数一样),它会填满堆栈PDQ。

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


由于
clony
无限地构造自身,您的程序抛出堆栈溢出异常:在
clony
的构造函数内,您创建一个新的
clony
对象并将其分配给字段
c
:该字段将反复执行相同的操作。

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

你的程序会抛出堆栈溢出异常,因为
clony
会无限地构造自己:在
clony
的构造函数中,你创建了一个新的
clony
对象并将其分配给字段
c
:然后它会一次又一次地做同样的事情。

我认为:

clony c = new clony();
给你一个例外

new clony() also has clony c = new clony() 
里面。。。它会无限大

顺便说一下,类的名字应该在开头用大写字母命名。

我认为:

clony c = new clony();
给你一个例外

new clony() also has clony c = new clony() 
里面。。。它会无限大

顺便说一下,类的名字应该在开头用大写字母命名