问题说明:
两个对象A初始化时候会引用B,B 在初始化时会引用A,这个过程是怎么完成的?
代码示例:
/*** 相互关联引用的初始化* @author administrator**/
public class Interdependent {private TestClass test = new TestClass( this );private String info;public Interdependent() {super();info = "测试相互引用的初始化过程。";test.setMessage( "TestClass完成初始化了,调用方法!" );System.out.println( "Interdependent()" );}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}public TestClass getTest() {return test;}public void setTest(TestClass test) {this.test = test;}/*** @param args*/public static void main(String[] args) {Interdependent inter = new Interdependent();System.out.println( inter.getInfo() );System.out.println( inter.test.getMessage() );}}class TestClass{private Interdependent dependent;private String message;public TestClass(Interdependent dependent) {super();this.dependent = dependent;System.out.println( "TestClass(), Interdependent.test=" + dependent.getTest() );}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}
代码分析:
第一步,执行 Interdependent 的构造函数,遇到 super() 方法。 super() 方法的作用很大,给对象分配堆空间(this 引用赋值)并将对象的字段初始化为默认值。
第二步,执行对象字段初始化(即 test = new TestClass( this ) ),此时传递的 this 引用的 test 还为 null。执行完成后 test 引用指向完成的对象。
第三步,执行 Interdependent 构造函数剩下的。
代码执行:
TestClass(), Interdependent.test=null
Interdependent()
测试相互引用的初始化过程。
TestClass完成初始化了,调用方法!