为什么两个类可以在JAVA中互相引用?

时间:2016-06-26 06:27:04

标签: java memory-management

我看到许多例子说明了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){}}

非常感谢

2 个答案:

答案 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);
}
}