Java 当两个类创建彼此的对象时会发生什么?

Java 当两个类创建彼此的对象时会发生什么?,java,Java,据我所知,当在给定类中创建对象时,会为该特定对象分配内存。 但在这种情况下: public class KindA { KindB b = new KindB(); // rest of the code } 在这种情况下,当两个类彼此创建对象时,在内存分配方面会发生什么情况?如果您尝试初始化其中一个类,您将得到一个堆栈溢出错误,由于KindA的初始值设定项创建了KindB类型的新对象,因此KindB的初始值设定项运行,它创建了KindA类型的新对象,KindA的初始值设定项再

据我所知,当在给定类中创建对象时,会为该特定对象分配内存。 但在这种情况下:

public class KindA {
    KindB b = new KindB();
    // rest of the code
}

在这种情况下,当两个类彼此创建对象时,在内存分配方面会发生什么情况?

如果您尝试初始化其中一个类,您将得到一个
堆栈溢出错误,由于
KindA
的初始值设定项创建了
KindB
类型的新对象,因此
KindB
的初始值设定项运行,它创建了
KindA
类型的新对象,
KindA
的初始值设定项再次运行,它创建并初始化了
KindB
类型的新对象,以此类推


这是一个无限递归,因此是stackoverflow。

JVM管理它,您为什么关心它?但在这种情况下,不存在递归吗?在使用这个模型编写代码之前,我想知道到底发生了什么。一个类也可以有一个自身的引用。JVM管理它,作为Java开发人员,您不需要关心显式内存管理(事实上,没有显式内存管理)。这两个类的构造函数不会正常终止,最终您会得到一个异常,因为堆栈内存已满。@ElliottFrisch我想他是在问它是如何工作的?请详细说明您的答案。当我在KindA类中创建KindB对象的堆栈(java.util类)时,情况是否会相同?(反之亦然)是堆栈溢出吗?对JVM内存管理不熟悉,但在C++中,您会从堆中分配这些对象,最终以这种方式耗尽内存,而不是因为您粉碎了堆栈。@ KeHaveSnNi:如果创建了堆栈 >,您就不会自动创建“元素类型”的实例。因此,在
KindA
中创建
Stack
不会导致递归(但是保持
KindB=newkindb();
并且不更改
KindB
会导致递归)。
public class KindB {
    KindA a = new KindA();
    // rest of the code
}