博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Think in Java笔记(5)

Posted on 2014-12-18 21:05  Dr.函兽  阅读(133)  评论(0)    收藏  举报

第五章.初始化与清理

5. 初始化值

类的成员变量允许在定义是直接提供初始值,这一赋值动作发生在构造之前,对分散的定义编译器会先执行定义,在执行其他动作,也就是说中间插入的其他代码在定义行为结束前不会产生动作。也可以在constructor中初始化。

public class InitialValues{
    boolean bool = true;
    char ch = 'x';
    int i = 99;
    InitialValues(){
        i = 10;
    }
}

上述代码中,i 首先置为99,然后变成10。

static不能应用于局部变量,因此它只能作用于域。如果是基本类型域而且未进行初始化,将会获得基本类型的标准初值;如果是个对象引用,默认初始化值就是null。

6. 初始化顺序

  • 静态属性 -> 普通属性 -> 构造方法/静态方法;
  • 域的初始化在类载入时(第一次创建实例)进行;
  • 访问类中的静态方法或静态域的方法时,类将被激活,进行初始化动作。

对象创建过程:

  1. 定位.class;
  2. 载入.class;
  3. 静态初始化;
  4. 在heap上分配空间;
  5. 执行初始化动作;
  6. 执行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
*/