java增強_枚舉的總結

1、爲什麼要有枚舉

1)問題:要定義星期幾或者性別的變量,該怎麼定義?假設用1-7分別表示星期一到星期日,但是可能會寫成int weekday=0嗎?

2)枚舉就是要讓某個類的變量取值只能爲若干個固定值的一個,否則,編譯器就會報錯。枚舉可以讓編譯器在編譯就控制源碼程序中填寫的非法值,普通變量的方式在開發階段無法實現這一目標。

2、用普通的Java類來實現枚舉:

1)私有構造函數

2)在類的內部構造對象,並加上final  Static標示,這樣可以根據需要創建固定數量

對象

3)可以有若干公有或抽象方法,例如,要提供的nextWeekDay方法必須是抽象的。採用抽象方法定義nextWeekDay將大量的if.esle語句轉移到了一個獨立的類中了。

實現如下:

public abstract class WeekDay1 {
//1私有構造函數
private WeekDay1(){}
//2在類的內部創建不變的對象
final static WeekDay1 SUN=new WeekDay1(){
@Override
public WeekDay1 nextWeekDay() {
// TODO Auto-generated method stub
return MON;
}
};
final static WeekDay1 MON=new WeekDay1(){
@Override
public WeekDay1 nextWeekDay() {
// TODO Auto-generated method stub
return SUN;
}
};
//3抽象本類方法
 abstract public WeekDay1 nextWeekDay();
 
 //4 打印日期
@Override
public String toString() {
// TODO Auto-generated method stub
return this==MON?"MON":"SUN";
}
}


3、創建一個枚舉類

1)枚舉就相當於一個類,其中也可以定義構造函數、成員變量、普通方法和抽象方法。

2)枚舉元素必須位於枚舉體重的最開始部分,枚舉元素列表的後要有分號與其成員分隔。把枚舉中的成員放在枚舉元素的簽名,編譯器就會報錯。

3)帶構造方法的枚舉

①構造方法必須定義成私有的private

②如果有多個構造方法,該如何選擇哪個構造方法?

③枚舉元素MONMON()的效果一樣,都是調用默認的構造方法。

4)帶方法的枚舉

②定義枚舉TrafficLamp

②實現普通的next方法

③實現抽象的next方法:每個元素 分別是由枚舉類的子類來生成的實例對象,這些子類採用類似內部類的方式進行定義。

5)增加上表示時間的構造方法。

6)枚舉只有一個成員時,就可以作爲一種單例的實現方式。

而枚舉類如下:

public enum TrafficLamp{
RED(30){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN; 
}
},
GREEN(45){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
},
YELLOW(5){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp (int time){this.time=time;};
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章