问题说明:
两个对象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完成初始化了,调用方法!