Java语言基础:对象的初始化

原创 2011年03月26日 01:23:00

1.  如果基类存在默认构造函数,则在子类构造之前,会先调用基类的默认构造函数:

 

 

2.  如果基类只有带参数的构造函数,子类必须在自己的构造函数中通过super(...)显式调用该基类构造函数:

 

3.  以上只讲了最简单的构造函数调用顺序,其实一个对象的真正的初始化过程应该是:

  1. 将对象的存储空间初始化为二进制的0.
  2. 先递归到最上层的基类去,将最上层的基类作为当前类。
  3. 对于当前类:
    1. 按声明顺序调用成员变量的初始设置代码。
    2. 调用构造函数。
  4. 接着将下一层继承类作为当前类,继续步骤3

 

先看下面的代码:

 

初始化过程大概是这样的:

  1.  先从C递归到B,再从B递归到A。
  2. A没有成员变量,所以A的构造函数被调用。
  3. 接到回到B,B有一个D类的成员有初始化,因此D的构造函数被调用。
  4. 接着B的构造函数被调用。
  5. 最后回到C,C的构造函数被调用。

所以输出应该是:

A create

D create

B create

C create

 

4.  必须小心在构造函数中调用虚函数(在JAVA里普通函数都是虚的)的隐患,特别是在基类的构造函数,因为此时继承类的成员可能还没有初始完毕:

 A的构造函数调用了proc,此时B的构造函数还没有被调用,因此i还没有被赋为10,最终输出结果是0。

 

5.  由于Java对象都是通过垃圾回收机制清理对象,因此Java的类没有析构函数,遇到需要清理类中资源的问题时,可以自己声明一个函数,如Dispose,在适当的时候调用之。

相关文章推荐

JAVA语言与面向对象设计基础

  • 2008年11月25日 18:51
  • 10KB
  • 下载

java语言基础之面向对象3

构造方法 定义:给对象的数据进行初始化。 格式: ①.方法名和类名相同。     ②.没有返回值,连void都没有。     ③.没有具体的返回值。 注: ①.如果我们没有给出构造方法,系统将自动提供...

黑马程序员-Java语言基础 –面向对象 第6天

---------------------- android培训、java培训、期待与您交流! ---------------------- 1、static(静态)关键字    ...

Java语言基础——类与对象

引言首先问你一个问题,世界是由什么组成的?如果你是化学家,你可能会说:“世界是由分子、原子、离子等化学物质组成的”。如果你是一个画家你可能会说,“世界是由不同颜色组成的”。不同的人会有不同的回答。但如...

黑马程序员-Java语言基础 –面向对象 第7天

---------------------- android培训、java培训、期待与您交流! ---------------------- 继承 1、继承的概述(关系中的一种) ...

Java语言基础之:面向对象

一、 面向对象概念 1.1  理解面向对象 面向对象是相对面向过程而言,面向对象和面向过程都是一种思想。 区别在于:面向过程强调的是功能行为;面向对象将功能封装进对象,强调具备了功能的对象。 面向对...
  • espose
  • espose
  • 2015年01月29日 19:21
  • 445

Java语言基础(十)-对象类型的转换

对象类型的转换

黑马程序员-Java语言基础–面向对象 第8天

---------------------- android培训、java培训、期待与您交流! ----------------------   1、多态 多态:可以理解为事物存在的多种...

黑马程序员——Java语言基础——03.面向对象(3)异常

------- android培训、java培训、期待与您交流! ---------- 本节考点: 一、throws和throw的区别: 1. throws用于标识函数暴露出的异常类,并且可以抛出多...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java语言基础:对象的初始化
举报原因:
原因补充:

(最多只允许输入30个字)