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基础-对象的内存分配与初始化

首先,什么是类的加载?类的加载由类加载器执行.该步骤将查找字节码(classpath指定目录),并从这些字节码中创建一个Class对象。java虚拟机为每种类型管理一个独一无二的Class对象。也就是...
  • Wang_1997
  • Wang_1997
  • 2016年08月21日 13:49
  • 1054

Java面向对象语法基础

面向对象:(1)可以使用类定义变量,使用类定义的变量都是引用变量。 (2)java程序使用类的构造器来创建该类的对象。 (3)java支持面向对象的三大特征:继承,封装和多态。java提供了pri...
  • zlz18225318697
  • zlz18225318697
  • 2016年09月19日 16:50
  • 287

Java基础总结之类与对象的初始化顺序

Java
  • crazyf2015
  • crazyf2015
  • 2015年06月27日 21:51
  • 2174

深入浅出Java类和对象的初始化

最近项目调试中出现了类初始化的问题,虽然事后证明是Eclipse的问题,但也暴露了对Java初始化机制的欠缺,在此翻译一篇javaworld上的文章。这篇文章很好,深入浅出地介绍了Java的初始化细节...
  • MOLIILOM
  • MOLIILOM
  • 2016年01月03日 21:23
  • 1112

java对象数组的声明和初始化

关键点: 在创建后,基本数据类型数组可以直接对数组元素赋值、引用等操作;而自定义对象数组,需要对数组中的每个对象元素独立进行创建,然后才可以对其赋值、引用等操作,如果没有单独对每个对象元素创建,...
  • fengzijia
  • fengzijia
  • 2015年06月21日 22:12
  • 11362

Java语言基础面试题及答案

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?  可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。 2、Java有没有goto?...
  • develop_wangzhi
  • develop_wangzhi
  • 2017年04月21日 11:32
  • 967

JAVA语言基础知识(一)

JAVA基础名词 JDK软件安装 JDK软件下的目录简介 JAVA关键字和保留字 二进制、八进制、十进制和十六进制 JAVA原码、反码、补码 JAVA三大注释...
  • dlmacr
  • dlmacr
  • 2017年03月28日 13:00
  • 509

java语言基础入门——各类流的介绍

1、什么是流?流是一个抽象的概念,代表一串数据集合,当java程序需要从数据源读取数据时,就开启了一个到数据源的流,同样,当数据需要输出数据到达目的地时,也需要开启一个流。流是用来处理数据的通道。流有...
  • qq_29672495
  • qq_29672495
  • 2016年08月05日 17:56
  • 1543

深入理解Java对象的创建过程:类的初始化与实例化

在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完...
  • justloveyou_
  • justloveyou_
  • 2017年05月18日 14:17
  • 9383

JAVA笔记-类的初始化及对象的初始化

类的初始化及对象初始化 初学Java,觉得类的初始化与对象的初始化这一块真的特别重要,翻了很多大神前辈的整理资料,还是有些懵懂,决定将资料整理下,也希望对后来的初学者有些许帮助。 上图为类的生命周...
  • Java_Chuck
  • Java_Chuck
  • 2016年06月26日 13:19
  • 3167
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java语言基础:对象的初始化
举报原因:
原因补充:

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