在C++的类定义中,是不能够在类中定义自身类的对象的,但是可以定义自身类的指针对象和引用。

class A
{
public:
 A ()
 {
  cout<<"Constructor method."<<endl;
 };
 A a;
};

void main()
{
 A aaaaa;
}

以上代码编译提示错误,a' : uses 'A',which is being defined。

如果把a换成*a就可以了。

而java就可以在类中定义自身类的对象。

class a{
  public a aa;
 }

这样的代码可以顺利编译,但是如果在定义的时候创建了对象实例,则也会编译失败的。

class a{
  public a aa = new a();
 }

提示错误:

Exception in thread "main"java.lang.StackOverflowError
 at test1$abc.<init>(test1.java:4)

很明显,堆栈溢出了。

为什么呢?其实以上问题的本质是一致的,就是是创建对象实例的时机问题。

在C++中,在定义对象的时候就创建了对象的实例,即分配了对象的内存空间。在java中,只有调用new的方法才能创建对象的实例,在内存中分配对象的空间。所以,如果在定义的时候就定义自身类的对象,就会导致递归创建对象的现象,创建了对象aa,因为aa是一个A类的实例,那么aa中还有一个aa对象,还要创建一个aa对象,为其分配内存…………,这样就会导致递归创建对象,结果就是内存被消耗殆尽。当然,这样的设计本身也不合理。

在JAVA中,对象只有在new时才能创建对象实例,所以类中可以定义自身类的对象。如果把上例修改成令一个类的实例,则不会有任何问题。

class a{
  public b bb = new b();
 }

这样的代码是可以编译并运行的。

但如果在java的类中用new创建自身的对象时,将其声明为static则是可以的。这是因为static成员只在类的对象被创建或类的静态成员(方法)被调用时进行一次初始化,其后即再不创建和初始化。

类中定义自身类的对象相关推荐

  1. caffe common 程序分析 类中定义类

    caffe中 有 common.hpp 和common.cpp // The main singleton of Caffe class and encapsulates the boost and ...

  2. C++在一个类中定义另一个有参数构造函数的类的对象

    class A { public:     A( int i ){} }; class B { public:     B():a(1){}    //或:B( int i ):a( i ){ }.对 ...

  3. 声明一个Tree(树)类,有成员ages(树龄),成员函数grow(int years)用以对ages 加上years,showage( )用以显示tree对象的ages值。在主函数中定义Tree类对

    //声明一个Tree(树)类,有成员ages(树龄), //成员函数grow(int years)用以对ages 加上years //,showage()用以显示tree对象的ages值. //在主函 ...

  4. 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Pe

    题目: 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加. 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法, ...

  5. 创建一个矩形类的子类——正方形类,类中定义求面积方法、重写求周长的方法.在主类中,输入一个正方形边长,创建正方形对象,求正方形的面积和周长

    题目: 编写一个应用程序,创建一个矩形类,类中具有长.宽两个成员变量和求周长的方法.再创建一个矩形类的子类--正方形类,类中定义求面积方法.重写求周长的方法.在主类中,输入一个正方形边长,创建正方形对 ...

  6. python 类中定义类_Python中的动态类定义

    python 类中定义类 Here's a neat Python trick you might just find useful one day. Let's look at how you ca ...

  7. 【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )

    文章目录 总结 一.接口中定义 call() 方法 二.类中定义 call() 方法 三.完整代码示例 总结 在 实例对象后使用 " () " 括号符号 , 表示调用该实例对象的 ...

  8. 在java程序中定义的类有两种成员_java试题 急需答案 谢谢!!!

    三.填空(每小题2分,共10分)1.在Applet中,创建一个具有10行45列的多行文本区对象ta的语句为:2.创建一个标识有"关闭"字样的标签对象gb的语句为.3.方法是一种仅有 ...

  9. python中类的定义_python 类中定义类

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 现有自定义类(color.py)如下,类位于路径'userschuxingpyt ...

最新文章

  1. 博士生起诉学校,因核心期刊发文数不够申请学位被拒,一审判决胜诉!
  2. 审计风险控制流程的起点_审计理论结构的起点和逻辑起点辨析
  3. R语言ggplot2可视化增加轴标签(ticks)和轴标题(title)之间的距离实战
  4. Java数据类型中String、Integer、int相互间的转换
  5. 记录一下Memcached的用法:
  6. 使用MiniProfiler跟踪MVC + EF + Bootstrap 2 权限管理系统的性能消耗
  7. 蓝桥杯2017初赛-分巧克力-二分
  8. 深入Golang之sync.Pool详解
  9. mysql文件导出NULL值处理_Mysql select into outfile NULL值导出的处理方法
  10. python文本提取序列信息_从fasta文件中通过头中的ID号提取序列
  11. VB的doevents,制造多线程的效果
  12. python画散点图-python画时间序列散点图
  13. Listary Pro - 搜索、管理都挺好
  14. springboot测试类无法注入bean
  15. 只有7步,就能将任何魔方6面还原
  16. 漫谈测试成长之探索——测试用例评审
  17. LVS负载均衡集群——NAT
  18. 1335:【例2-4】连通块
  19. pom.xml中解决Provides transitive vulnerable dependency maven:org.yaml:snakeyaml:1.33警告
  20. echarts柱状图数值差异过大和最小值无法选中的问题解决

热门文章

  1. 【11_83】Remove Duplicates from Sorted List
  2. 在HTML文件中加载js
  3. Android-ndk编译osgdb_3ds静态库
  4. FPGA Design's Tips
  5. Excel列数和列字母的转换(column number 和 column letters 互转)
  6. 如何解决复杂条件下的程序流的控制问题?
  7. 4.编程打印一个二维数组中所有元素的和,并打印最大值,最小值(以及它们所在的行号和列号)
  8. 牛客网-剑指offer 第二题(字符替换)
  9. HarmonyOS之设备传感器的功能和使用
  10. iOS之性能优化·提高App的编译速度