thinking in java -- notes-1

5.6成員初始化
1.對於方法的局部變量,java以編譯時錯誤的形式來貫徹這種保證。java

void f(){
  int i;
  i++;//error -- i not initialized 用到i的時候會報錯。
}

2.要是類的數據成員(即字段)是基本類型,保證會有一個初始值。
3.在類裏定義一個對象引用時,若是不將其初始化,此引用會得到一個特殊值null。this

5.7構造器初始化
1.初始化順序
a.在類的內部,變量定義的前後順序決定了變量初始化的順序。
b.變量定義散佈於方法定義之間,它們仍舊會在任何方法(包括構造器)被調用以前獲得初始化。
2.靜態數據的初始化
不管建立多少對象,靜態數據只佔用一份存儲區域。static關鍵字不能應用於局部變量,所以它只能做用於域。若是一個域是靜態的基本類型域,且也沒有對它進行初始化,那麼它就會得到基本類型的標準初值;若是它是一個對象引用,那麼它的默認初始值就是null。
初始化的順序是先靜態對象(前提是它們還沒有因前面的對象建立過程而被初始化),然後是非靜態對象。spa

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.code

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
*/
相關文章
相關標籤/搜索