为什么类的成员变量是自身类型时只可以声明

在c++primer中看到这么句话“因为只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员。然而,只要类名义出现就可以认为该类已经声明,因此,类的数据成员可以是指向自身类型的指针或引用”

java中没有这么限制,先实验下:

 

 

public class A {
A a = new A();
// A a;
A(){
System.out.println("create A");
// a = this;
}
public static void main(String[] args)
{
new A();
}
}

 

 

运行出现异常,Exception in thread "main" java.lang.StackOverflowError

下面分析一下,这么做的问题,当在A中保存有A类型的对象,并为之进行初始化操作。当我们(1)创建一个new A()时,由于创建的对象自身包含一个A类型的对象,所以初始化对象时要为A创建new A()的实例,这时程序又返回到(1)处执行。无限制的创建As()对象,因此会产生StackOverflowError异常。

 

 

注意类似下面的代码将会出现同样的问题:

class B{
A a = new A();
}
public class A {
B b = new B();
// A a;
A(){
System.out.println("create A");
// a = this;
}
public static void main(String[] args)
{
new A();
}
}

你可能感兴趣的:(为什么类的成员变量是自身类型时只可以声明)