在构造函数中(就像罗伯特·科克已经说过的那样)class A { B b; public A(){ b = new B(); b.member = 5; }}直接作为属性class A { B b = new B(5); }带初始化器class A { B b; { b = new B(); b.member = 5; }}
在第一个类的构造函数中:class A { public A() { b = new B(); } B b;}或者甚至像这样:class A { public A() { } B b = new B();}
一般的解决方案是:public class A { private final B b; public A(B b) { this.b = b; } }...A a = new A(new B());当两个实例相互引用时,这就变得很有趣,那么您需要在至少一个类中使用 setter:public class B { private A a; // the field cannot be final in this case public void setA(A a) { this.a = a; } }....B b = new B()A a = new A(b);b.setA(a);类本身创建另一个实例的答案不是通用的解决方案。