java中经常可以看到拥有自身对象的属性,如下面所示:
public class TestSelfObject {
private String b ="Hello";
private TestSelfObject a; //= new A(); 这里千万不能初始化
public void method(){
//在某条件满足时
a=new TestSelfObject();
}
public static void main(String[] args) {
TestSelfObject b = new TestSelfObject();
}
}
上面的程序跑起来很正常,只是声明了自身对象作为自身属性,即 ”private TestSelfObject a;“ 这一句,但是没有初始化,因为不能在新建对象的时候初始化,不然就会产生死循环,这里用递归的说法更合理,就是每一个TestSelfObject都会想要在初始化的时候帮自己的属性分配内存,直至内存耗尽。
还有一种方式是可行的,就是静态变量,因为是在类初始化的时候只加载一次,所以也就不会有这个问题了,如下所示:
public class TestSelfObject {
private String b ="Hello";
private static TestSelfObject a = new TestSelfObject();
public static void main(String[] args) {
TestSelfObject b = new TestSelfObject();
}
}