我看到许多例子说明了JAVA中的一对一或多对多关系。但我仍然无法理解为什么会这样。
如果我有:
A类(){B b = new B();}
class B(){A a = new A();}
当我在main方法中新建A作为起点时,JAVA如何分配内存来处理这种情况?内存分配会无穷无尽吗? A有b,那么b有另一个A然后是go on forever
进一步的问题:
我可以这样做吗?
A级(){B b; public void setB(B bb){}}
B级(){A a; public void setA(A aa){}}
非常感谢
答案 0 :(得分:3)
Java无法处理这种情况 1 ;如果我们更正代码并分配A
2 的实例(并使这些类成为static
,那么我们可以将其嵌入到一个简单的MCVE中)我们看到像
static class A {
B b = new B();
}
static class B {
A a = new A();
}
public static void main(String[] args) {
A a = new A();
}
执行时,抛出
Exception in thread "main" java.lang.StackOverflowError
1 在编译时,它会在运行时通过耗尽堆栈内存来处理它。
2 如果我们尝试分配B
,也会发生同样的情况。
答案 1 :(得分:0)
除非这些对象是静态的,程序才会抛出
java.lang.StackOverflowError
可以通过将变量设为静态来轻松管理,无论调用多少次并且内存不会溢出,这将导致只有一个实例
如果你想要这样的东西工作,你可以这样做(但这不是一个好习惯)
public class B {
static A a=new A();
}
public class A {
static B b=new B();
}
public class c {
public static void main(String[] args) {
A a=new A();
System.out.println("Task completed"+a);
}
}