第五章.初始化与清理
5. 初始化值
类的成员变量允许在定义是直接提供初始值,这一赋值动作发生在构造之前,对分散的定义编译器会先执行定义,在执行其他动作,也就是说中间插入的其他代码在定义行为结束前不会产生动作。也可以在constructor中初始化。
public class InitialValues{
boolean bool = true;
char ch = 'x';
int i = 99;
InitialValues(){
i = 10;
}
}
上述代码中,i 首先置为99,然后变成10。
static不能应用于局部变量,因此它只能作用于域。如果是基本类型域而且未进行初始化,将会获得基本类型的标准初值;如果是个对象引用,默认初始化值就是null。
6. 初始化顺序
- 静态属性 -> 普通属性 -> 构造方法/静态方法;
- 域的初始化在类载入时(第一次创建实例)进行;
- 访问类中的静态方法或静态域的方法时,类将被激活,进行初始化动作。
对象创建过程:
- 定位.class;
- 载入.class;
- 静态初始化;
- 在heap上分配空间;
- 执行初始化动作;
- 执行constructor。
7. 可变参数列表
method(typeName ... args)
- 编译器会自动用参数填充数组。传入的如果师数组编译器不会再执行转换;
- 不依赖于自动包装机制,但也不拒绝自动包装机制;
- 使用可变参数列表重载方法是要小心谨慎,这种行为应尽量避免。
8. 枚举类型
public enum Spiciness {NOT,MILD,MEDIUM,HOT,FLAMING}
public class SimpleEnumUse{
Spiciness hotHot = Spiciness.MEDIUM;
System.out.println(hotHot);
}
/*Output:
MEDIUM
*/
浙公网安备 33010602011771号