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 */