Java类的初始化过程及清理
2016-01-05 20:52
471 查看
一、类的数据成员初始化
Java中类的数据成员初试化可能有两种形式。在定义类成员变量的地方直接提供初始化值(这是C++中不允许的)
在构造器中初试化。(Java中不存在类似C++中的初始化列表)
两者的区别是,第一种方式是数据成员直接初试化为提供的初始化值,而在构造器中初始化,其实在数据成员已经初试化为默认值(比如基本类型如int 初始化为0,引用类型初试为null,其实在在构造器已经不能称为初始化了,应该是赋值)
初始化顺序
如果有静态变量则先初始化静态变量,如果基类中也有静态变量且之前没有初始化过,则先初始化基类中的静态变量再初始化子类的静态变量(静态变量只初始化一次,如果已经初始化则不再初始化)如果类有基类则按照基类中的变量的定义顺序初始化变量,然后调用基类的构造函数;
按照类中变量的定义顺序初试化变量,然后调用构造函数。
java中有继承体系的类型也是先构造其基类,再构造子类。
二、垃圾回收
java中没有c++中对应的析构函数,如果java不再使用需要处理,再必须手动调用对应的处理函数。java中对应的对象的销毁,使用java的gc机制处理。对于finalize()不是析构函数,他的调用时机不确定,只在垃圾回收器准备好释放对象占用的空间时,首先调用其finalize()方法。
对于java中的gc机制采用“停止-赋值”,“标记-清扫”等方式。具体有待详细了解。
相关文章推荐
- Java 字符串索引indexOf
- struts的过滤器代码
- 25个Java机器学习工具&库
- Eclipse快捷键 10个最有用的快捷键
- struts.xml中namespace的配置之浏览器兼容性
- Java基础知识归纳-1-面向对象
- Spring学习笔记—Spring之旅
- Socket分片:基于Netty的Java实现
- Spring学习笔记—Spring之旅
- Java 集合类 TreeSet、TreeMap
- 用java解leetcode上easy题3
- 2016、1、5
- struts + mybatis +spring实现黑名单/灰名单管理
- java代理机制
- 解决SpringMvc中org.springframework.web.servlet.DispatcherServlet noHandlerFound的错误
- java ClassLoader / 显示classLoader 名字 / 层次关系
- 关于接口的几点问题
- java程序调用mysql存储过程
- myEclipse 界面窗口打不开问题
- 【java】:关于private型的理解