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