Java 快速導覽 - Enum 型態

Enum 型態為一組固定的常數 (constant) ,用為某些固定的識別名稱,如方向、月份等等,舉例如下

enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
} 

class EnumDemo {
    Day day;
    
    public EnumDemo(Day day) {
        this.day = day;
    }
    
    public void monkeydoing() {
        switch (day) {
            case SUNDAY:
                System.out.println("星期七,猴子刷油漆");
                break;
                
            case MONDAY:
                System.out.println("星期一,猴子穿新衣");
                break;
                
            case TUESDAY:
                System.out.println("星期二,猴子肚子餓");
                break;

            case WEDNESDAY:
                System.out.println("星期三,猴子去爬山");
                break;
            
            case THURSDAY:
                System.out.println("星期四,猴子去考試");
                break;
                
            case FRIDAY:
                System.out.println("星期五,猴子去跳舞");
                break;
                
            case SATURDAY:
                System.out.println("星期六,猴子去斗六");
                break;
        }
    }
    
    public static void main(String[] args) {
        EnumDemo day1 = new EnumDemo(Day.MONDAY);
        day1.monkeydoing();
        EnumDemo day2 = new EnumDemo(Day.TUESDAY);
        day2.monkeydoing();
        EnumDemo day3 = new EnumDemo(Day.WEDNESDAY);
        day3.monkeydoing();
        EnumDemo day4 = new EnumDemo(Day.THURSDAY);
        day4.monkeydoing();
        EnumDemo day5 = new EnumDemo(Day.FRIDAY);
        day5.monkeydoing();
        EnumDemo day6 = new EnumDemo(Day.SATURDAY);
        day6.monkeydoing();
        EnumDemo day7 = new EnumDemo(Day.SUNDAY);
        day7.monkeydoing();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:EnumDemo.java
    功能:示範物件導向的基本觀念 
    作者:張凱慶
    時間:西元 2010 年 10 月 */


編譯後執行,結果如下



第 1 行到第 4 行
enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
}


這表示識別字 Day 為 Enum 型態,有七個值,分別是 SUNDAY 、 MONDAY 、 TUESDAY 、 WEDNESDAY 、 THURSDAY 、 FRIDAY 、 SATURDAY 。


第 7 行
Day day;


這裡宣告屬性 day 為 Day 型態的變數。因此,函數 main() 的內容
EnumDemo day1 = new EnumDemo(Day.MONDAY);
day1.monkeydoing();
EnumDemo day2 = new EnumDemo(Day.TUESDAY);
day2.monkeydoing();
EnumDemo day3 = new EnumDemo(Day.WEDNESDAY);
day3.monkeydoing();
EnumDemo day4 = new EnumDemo(Day.THURSDAY);
day4.monkeydoing();
EnumDemo day5 = new EnumDemo(Day.FRIDAY);
day5.monkeydoing();
EnumDemo day6 = new EnumDemo(Day.SATURDAY);
day6.monkeydoing();
EnumDemo day7 = new EnumDemo(Day.SUNDAY);
day7.monkeydoing();


day1 的屬性 day 為 Day.MONDAY , day2 的屬性 day 為 Day.TUESDAY ,餘下類推。然後呼叫方法 monkeydoing() ,程式會依 Day 型態的值印出相對應的字串。


中英文術語對照
常數constant




4 則留言:

Unknown 提到...

public EnumDemo(Day day) {
this.day = day;
}

這幾句有什麼用?看了很久都不明白...

我只是個誘餌~~~ 提到...

你應該是用 c 去聯想 java 的 enum, 其實應該也把 enum 看成是 class 的特例

Kaiching Chang 提到...

是的, Enum 型態也是種類別
倒是這裡提供的範例盡可能要求簡單不複雜

^_^

Unknown 提到...

this 是代表Day這個class
睇constructor 你就會知道this的用法