thinking in java -- notes-1

5.6成员初始化
1.对于方法的局部变量,java以编译时错误的形式来贯彻这种保证。

void f(){
  int i;
  i++;//error -- i not initialized 用到i的时候会报错。
}

2.要是类的数据成员(即字段)是基本类型,保证会有一个初始值。
3.在类里定义一个对象引用时,如果不将其初始化,此引用会获得一个特殊值null。

5.7构造器初始化
1.初始化顺序
a.在类的内部,变量定义的先后顺序决定了变量初始化的顺序。
b.变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。
2.静态数据的初始化
无论创建多少对象,静态数据只占用一份存储区域。static关键字不能应用于局部变量,因此它只能作用于域。如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初值;如果它是一个对象引用,那么它的默认初始值就是null。
初始化的顺序是先静态对象(前提是它们尚未因前面的对象创建过程而被初始化),而后是非静态对象。

package com.yu;

public class InitTest2 {
    static A a = new A();
    A aa = new A();
    public static void main(String[] args) {
        System.out.println("Test2");
    }
    static A aaa = new A();
}

class A {
    A() {
        System.out.println("A con");
    }
}

/*output
A con
A con
Test2
*/


package com.yu;

public class InitTest3 {

    public static void main(String[] args) {
        new Bs();
        new Bs(2);
    }

}

class Bs {
    // static 只初始化一次
    {
        B b = new B();
        B bb = new B();
        System.out.println("~~");
    }

    Bs() {
        System.out.println("Bs()");
    }

    Bs(int i) {
        System.out.println("Bs(i)");
    }
}

class B {
    B() {
        System.out.println("B()");
    }
}
/*output
B()
B()
~~
Bs()
B()
B()
~~
Bs(i)

*/

5.9枚举类型
1.

package com.yu;

public class EnumTest1 {

    public static void main(String[] args) {
        for(Spiciness s : Spiciness.values()){
            System.out.println(s + "-ordinal-" + s.ordinal());
        }
    }

}

enum Spiciness{
    NOT,MILD,MEDIUM,HOT,FLAMING
}

/*output
NOT-ordinal-0
MILD-ordinal-1
MEDIUM-ordinal-2
HOT-ordinal-3
FLAMING-ordinal-4
*/

2.

package com.yu;

public class EnumTest2 {
    Spiciness2 degree;
    EnumTest2(Spiciness2 degree){
        this.degree = degree;
    }
    void describe(){
        System.out.print("this burrito is :");
        switch(degree){
        case NOT:System.out.println("not spicy at all");
        break;
        case MEDIUM:System.out.println("a little hot");
        break;
        }
    }
    public static void main(String[] args) {
        new EnumTest2(Spiciness2.NOT).describe();
        System.out.println("--------------------");
        new EnumTest2(Spiciness2.MEDIUM).describe();
    }

}

enum Spiciness2{
    NOT,MEDIUM
}
/*output
this burrito is :not spicy at all
--------------------
this burrito is :a little hot
*/

 

posted @ 2014-02-26 11:49  消失的旧时光  阅读(158)  评论(0编辑  收藏  举报