5.1 用构造器确保初始化
采用构造器来初始化对象, 与类的名字一致, 没有返回值 5.2 方法重载 - 方法名字一样, 形参不一样 5.3 默认构造器 - 编译器默认创建, 一般有其他的构造函数, 编译器就不在自动创建默认构造器 5.4 This 关键字- 在方法中使用, 表示对当前方法的对象的引用
- 在构造函数中调用构造函数,必须置于方法起始处,而且只能调用一次
5.5 清理 : 终结处理和垃圾回收
一旦垃圾回收器准备释放对象占用的存储空间,将首先调用finalize方法, 并在下一次垃圾回收动作发生时,在真正的回收对象占用的内存 如何标记对象死亡 ? 1) 引用计数 - 循环依赖的问题解决不了 2) 可达性分析 - 从栈和静态存储区开始遍历引用 垃圾回收的特点 - 自适应、停止复制、标记清除,分代的 虚拟机其他的优化技术 - JIT : 将程序全部或者部分变异成本地机器码 5.6 成员初始化 Java尽力保证所有的变量在使用前都被恰当的初始化; 对于局部变量, 如果没有初始化,会提示编译错误; 对于成员变量,基本类型有默认的初始值, 对于引用类型, 默认值为Null 5.6.1 指定初始化 可以在成员变量定义处为其赋值 5.7 构造初始化 构造函数仍然无法阻止自动初始化的进行, 会在构造函数调用之前进行默认初始化 5.7.1 初始化顺序 在类的内部, 变量定义的顺序决定了变量的初始化顺序 5.7.2 静态数据初始化 无论创建多少个对象,静态数据都只有一份存储区域 对象的创建过程 1)加载class 2)在堆上为对象分配空间,成员变量为默认值 3) 执行出现于字段定义处的初始化 4) 执行构造器 5.7.3 显示的静态初始化 5.7.4 非静态实例初始化 5.8 数组初始化 定义 :类型后面加上一对空括号;编译器不允许指定数组的大小,这里仅仅是定义了数组的引用,而没有给对象本身分配任何空间 在数组的定义处可以用特殊的表达式 int[] a1 = {1,2} 数组有一个固有成员, length 理解数组的初始化 5.8.1 可变参数列表 5.9 枚举类型 JDK 1.5 之后引入