1. 用例
本章讨论初始化和清理的问题,java采用了构造器初始化,并提供了“垃圾回收器”对不再使用的内存资源进行释放。
2. 静态
2.1 用构造器确保初始化
构造器采用和类相同的名称。
new 表达式返回对新建对象的引用,但构造器没有任何返回值。
当创建对象时也就是该此对象分配一个存储空间,并返回一个对象引用的名字。
2.2 方法重载
为了让方法名相同而形式参数不同,必须使用方法重载。
每个重载的方法都必须有一个独一无二的参数类型列表。
2.3 默认构造器
如果类中没有定义构造器方法,则编译器会自动创建一个默认构造器方法。
2.4 this关键字
this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。
在构造器中调用构造器,使用this(参数列表),将调用符合此参数列表的某个构造器。
在static方法的内部不能调用非静态方法。
2.5 清理:终结处理和垃圾回收
垃圾回收器只能释放经由new分配的内存。
对于非new分配的资源(如调用本地方法),可在类中定义finalize方法,当垃圾回收器准备释放对象资源时,将首先调用finalize方法,并在下一次垃圾回收动作发生时,才真正回收对象占用的内存。
垃圾回收只与内存有关。
System.gc()用于强制进行终结动作。
垃圾清理的思路是从堆栈和静态存储区出发,遍历所有引用,找出存活的对象。
当程序需要装载某个类时,编译器先找到.class文件,然后将该类的字节码装入内存,最后有两种方案选择,一种是让编译器编译所有代码,另一种是惰性加载,只有在需要时才加载类字节码。
2.6 成员初始化
类的每个成员都会有一个默认值,基本类型为0或false,引用类型为null.
2.7 构造器初始化
在内的内部变量定义的顺序决定了初始化的顺序。
无论创建多少对象,静态数据都占用一份存储空间。
2.8 数组初始化
数组只是相同类型的,用一个标识符名称封装起来的一个对象序列或基本数据类型。
数组是通过方括号操作符[] 来定义和使用的。
定义数组只需要在类型名后加上一对空方括号。如int[] name
可变参数列表:类型... 变量名 如(String... strs)
2.9 枚举类型
用于我们在需要群组并使用枚举类型时。
enum可以在switch语句内使用。
3. 动态
3. 1 对象的创建过程
1. java解释器查找类路径,以定位class 文件。
2. 载入class文件,有关静态初始化的动作都执行。
3. 在堆上为对象分配足够的空间。
4. 分配的存储空间被清零。
5. 执行字段定义出的动作。
6. 执行构造器。