Java类的初始化过程及清理

一、类的数据成员初始化

  Java中类的数据成员初试化可能有两种形式。

  • 在定义类成员变量的地方直接提供初始化值(这是C++中不允许的)
  • 在构造器中初试化。(Java中不存在类似C++中的初始化列表)

  两者的区别是,第一种方式是数据成员直接初试化为提供的初始化值,而在构造器中初始化,其实在数据成员已经初试化为默认值(比如基本类型如int 初始化为0,引用类型初试为null,其实在在构造器已经不能称为初始化了,应该是赋值)

初始化顺序

  •   如果有静态变量则先初始化静态变量,如果基类中也有静态变量且之前没有初始化过,则先初始化基类中的静态变量再初始化子类的静态变量(静态变量只初始化一次,如果已经初始化则不再初始化)
  •  如果类有基类则按照基类中的变量的定义顺序初始化变量,然后调用基类的构造函数;
  •  按照类中变量的定义顺序初试化变量,然后调用构造函数。

java中有继承体系的类型也是先构造其基类,再构造子类。

二、垃圾回收

  java中没有c++中对应的析构函数,如果java不再使用需要处理,再必须手动调用对应的处理函数。java中对应的对象的销毁,使用java的gc机制处理。

对于finalize()不是析构函数,他的调用时机不确定,只在垃圾回收器准备好释放对象占用的空间时,首先调用其finalize()方法。

对于java中的gc机制采用“停止-赋值”,“标记-清扫”等方式。具体有待详细了解。

posted on 2016-01-05 20:52  冰雨纷飞  阅读(362)  评论(0编辑  收藏  举报

导航