天天看點

黑馬程式員_java基礎加強學習之枚舉

------- <a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">android教育訓練</a>、<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">java教育訓練</a>、期待與您交流! ----------

1.5的新特性:枚舉

枚舉就是一個類,枚舉的成員就是類的執行個體對象。

枚舉的作用:

枚舉可讓某個類型的變量的取值隻能為若幹個固定值中的一個,否則,編譯器就會報錯。枚舉可以讓編譯器在編譯時就可以控制源程式中填寫的非法值,普通變量的方式在程式設計時無法實作。

(假設用1~7分别表示星期一到星期日,但有人可能會寫成int weekDay = 0;即便使用常量方式也無法阻止意外。)

例子: 自定義weekDay.

import java.util.Date;

public abstract class EnumTest {

public static void main( String [] args) {

WeekDay1 weekDay = WeekDay1.MON ;

System.out .println(weekDay.nextDay());

//隻能給定義枚舉方法中指定的的元素。

WeekDay weekDay2 = WeekDay. FRI ;

//枚舉自動幫我們實作了toSting方法,這是我們的好處。

System.out .println(weekDay2);

System.out .println(weekDay2.name());

System.out .println(weekDay2.ordinal());   //對象所在的位置序号。

System.out .println(WeekDay.valueOf( "SUN" ));     //相當于toString方法。

System.out .println(WeekDay.values() .length );    //values方法将枚舉類對象變成數組。

new Date (300){};

}

//元素清單必須位于所有成員之前,構造方法必須是私有的。

//若要指明用第二個構造函數,在元素後面直接跟上一對有參數的圓括号。指定參數清單。

//若元素後跟上一對括号無參數,可用于表示不帶參數的構造方法。

//枚舉類

public enum WeekDay{

SUN(1),MON(),TUE ,THI,FRI, SAT;

//無參構造方法

private WeekDay(){

System.out.println("first");

}

//重載構造方法

private WeekDay( int day){

System.out .println("second");}

}

//定義枚舉TrafficLamp,實作抽象的next方法:每個元素分别是由枚舉類的子類來生成的執行個體對象。

//3個元素,每個元素都是由子類來寫的 ,子類必須完成父類的抽象方法。

public enum TrafficLamp{

//紅燈、綠燈、黃燈,後面出現{}是因為這些成員由其子類來實作

RED(30){

//匿名内部類實作弗雷的抽象方法

public TrafficLamp nextLamp(){

return GREEN ;}

},

GREEN (45){

public TrafficLamp nextLamp(){

return YELLOW ;}

},

YELLOW (5){

public TrafficLamp nextLamp(){

return RED ;}

};

//抽象方法

public abstract TrafficLamp nextLamp();

private int time;

private TrafficLamp (int time){this.time=time;}

}

}

public abstract classWeekDay1 {

private WeekDay1(){}

//以下為匿名内部類。用了抽象類把nextDay分别轉成一個個獨立的類。

//每個元素分别用一個公有的靜态成員變量表示。

public final staticWeekDay1 SUN=newWeekDay1(){

publicWeekDay1 nextDay(){

returnMON;

}

};

public final staticWeekDay1 MON=new WeekDay1(){

publicWeekDay1 nextDay(){

returnTUE;

}

};

public final staticWeekDay1 TUE=new WeekDay1(){

publicWeekDay1 nextDay(){

return WED;

}

};

......

public final static WeekDay1 SAT=new WeekDay1(){

public WeekDay1 nextDay(){

returnSUN;

}

};

//方法是靜态的,類也必須是靜态的。

//采用抽象方法定義nextDay就将大量的if.else語句轉移成了一個個獨立的類。

public abstractWeekDay1 nextDay();

publicString toString(){

if(this==SUN)

return"SUN";

else if (this==MON)

   return"MON";

......

else if (this==SAT)

 return "SAT";

else return null; 

}

}

總結:1.枚舉是一種特殊的類,其中的每個元素都是該類的一個執行個體對象。

2.枚舉相當于一個類,其中可以定義構造方法。成員變量、普通方法和抽象方法。

3.構造方法必須定義成私有的。如果有多個構造方法,都是調用預設的構造方法。

4.當枚舉隻有一個成員時,就可以作為一個單例的實作方式。

5.枚舉元素必須位于枚舉體中的最開始部分,枚舉元素清單的後要有分号與其他成員分隔。把美劇中的成員方法或變量等放在枚舉元素的前面,編譯報告錯誤。

繼續閱讀