Java类交叉引用的问题

最近对Java中两个类交叉引用的问题有点迷惑,如下代码

类A

    public class A {
    
        private B  b;
    
        A(){
            b = new B();
            System.out.println("class A is building");
        }
    }

类B

public class B {

    private A a;

    B(){
        a = new A();
        System.out.println("class B is building");
    }

}

测试类

 public class Test {
    
     public static void main(String[] args) {
         A a = new A();
     }
    
 }

测试方法运行后,提示

Exception in thread "main" java.lang.StackOverflowError

请各位大哥帮忙分析分析

阅读 7k
3 个回答

你不是说了问题在哪里了吗?
就是在这个循环引用上,你构造A的时候需要一个B,在构造需要的B的时候,又需要构造一个新的A,然后这个A又需要构造另一个新的B,这个新的B又需要A。。。
解决这个问题,你需要一个默认的构造参数,里面什么都不需要的,然后构造出两个空对象再去相互引用。

死循环,溢出

过度耦合和依赖导致的,这就是为什么会有Spring的诞生

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题