菜瓜:水稻,这次我特意去看了java的循环依赖
水稻:哟,有什么收获
菜瓜:两种情况,构造器循环依赖,属性循环依赖
构造器循环依赖在逻辑层面无法通过。对象通过构造函数创建时如果需要创建另一个对象,就会存在递归调用。栈内存直接溢出
属性循环依赖可以解决。在对象创建完成之后通过属性赋值操作。
package club.interview.base; /** * 构造器循环依赖 - Exception in thread "main" java.lang.StackOverflowError * toString()循环打印也会异常 - Exception in thread "main" java.lang.StackOverflowError * @author QuCheng on 2020/6/18. */ public class Circular { class A { B b; // public A() { // b = new B(); // } // @Override // public String toString() { // return "A{" + // "b=" + b + // '}'; // } } class B { A a; // public B() { // a = new A(); // } // @Override // public String toString() { // return "B{" + // "a=" + a + // '}'; // } } private void test() { B b = new B(); A a = new A(); a.b = b; b.a = a; System.out.println(a); System.out.println(b); } public static void main(String[] args) { new Circular().test(); } }