黑馬程式設計師——java高新技術:列舉
列舉是java1.5版本的新特性。
1,列舉是什麼?
就是讓某個型別的變數的取值只能為若干個固定值中的一個。可以讓編譯器在編譯時就可控制,避免出錯。
2.列舉的應用
(1)定義列舉使用 的關鍵字是enum,定義一個最簡單的列舉。
public class EnumText { public static void main(String[] args) { // TODO Auto-generated method stub WeekDay weekDay1 = WeekDay.MON; } public enum WeekDay{ SUN,MON,WED,THT,FRI,SAT; } }
這就是一個最簡單的列舉。
(2)我們在看一個列舉
列舉的幾個特性:public enum TraffictLamp{ RED(30) { @Override public TraffictLamp nextLamp() { // TODO Auto-generated method stub return GREEN; } }, GREEN(35) { @Override public TraffictLamp nextLamp() { // TODO Auto-generated method stub return YELLOW; } }, YELLOW(5) { @Override public TraffictLamp nextLamp() { // TODO Auto-generated method stub return RED; } }; public abstract TraffictLamp nextLamp(); private int time; private TraffictLamp(int time){this.time = time;} }
1、構造方法必須是private訪問許可權。
2、每一個元素(RED、YELLOW、BLACK)就是列舉類TraffictLamp的一個例項元素
3、列舉中可以有抽象方法,但是和定義普通類中抽象方法時,普通類必須是抽象類,而列舉不用,但是因為列舉類中有例項元素且有抽象方法,例項元素在定義時必須實現抽象方法。並且元素要看構造方法來具體定義。本例中定義了一個有引數的構造方法。
4,列舉是一種特殊的類,其中的每一個元素都是該類的一個例項物件,如果列舉只有一個成員時(也可以說是元素),就可以作為一種單例的實現方式。單例可以看做是一種列舉。
列舉的基本應用:常有方法有values()
values():獲取的是該列舉類陣列,為無參方法。
valueOf(String name):獲得傳入的字串對應的列舉型別元素。注意傳入的字串要和列舉元素大小寫一模一樣。
name():獲得當前列舉型別元素的名字。
toString():同name()方法一樣,獲得當前列舉型別元素的名字
ordinal():獲得當前列舉元素的在列舉中序號。
列舉總結:
1、列舉就相當於一個類,其中可以定義構造方法(必須私有),成員變數,普通方法和抽象方法。
2、列舉元素必須位於列舉體中最開始部分,列舉元素列表的後面沒有其他成員時可以省略分號,若有其他成員則要用分號進行分割。
3、列舉只有一個成員時,可以作為一種單例的實現方法。
帶有構造方法的列舉:
1、構造方法必須定義為私有。
2、如果有多個構造方法,列舉元素可以根據需要,呼叫相應的構造方法。
帶有方法的列舉:
定義列舉,有抽象方法時,每個元素都是該列舉的一個例項物件,所以每個元素都必須實現抽象方法,採用類似匿名類的方式進行實現。