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


    在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();
    }
    }

  • 相关阅读:
    Optimal Milking
    Alice's Chance
    The Perfect Stall
    项目范围管理
    计算机网络总结 第六章 网络层
    计算机网络总结 第一章 计算机网络概论
    Http与url
    javaScript期末复习基础
    计算机网络各层涉及协议
    javaScript_canvas 面向对象实现
  • 原文地址:https://www.cnblogs.com/wendao/p/2609151.html
Copyright © 2020-2023  润新知