枚舉2--java25(02/18/2016)

一、枚舉類
1.如何自定義枚舉類
2.如何使用enum關(guān)鍵字定義枚舉類:將枚舉類對(duì)象相同部分刪掉,同時(shí)中間用逗號(hào)分隔。
①常用的方法:values() valueOf(String name)
②如何讓枚舉類實(shí)現(xiàn)接口:可以讓不同的枚舉類對(duì)象調(diào)用被重寫的抽象方法,執(zhí)行的效果不同。(相當(dāng)于讓每個(gè)對(duì)象重寫抽象方法)
(實(shí)現(xiàn)方法:在相鄰枚舉對(duì)象中間用大括號(hào)包住,重寫抽象方法)
必須在枚舉類的第一行聲明枚舉類對(duì)象。

枚舉類和普通類的區(qū)別:
使用 enum 定義的枚舉類默認(rèn)繼承了 java.lang.Enum 類;
枚舉類的構(gòu)造器只能使用 private 訪問(wèn)控制符;
枚舉類的所有實(shí)例必須在枚舉類中顯式列出(, 分隔 ; 結(jié)尾). 列出的實(shí)例系統(tǒng)會(huì)自動(dòng)添加 public static final 修飾;
JDK 1.5 中可以在 switch 表達(dá)式中使用Enum定義的枚舉類的對(duì)象作為表達(dá)式, case 子句可以直接使用枚舉值的名字, 無(wú)需添加枚舉類作為限定。

枚舉類的主要方法:
values()方法:返回枚舉類型的對(duì)象數(shù)組。該方法可以很方便地遍歷所有的枚舉值。
valueOf(String str):可以把一個(gè)字符串轉(zhuǎn)為對(duì)應(yīng)的枚舉類對(duì)象。要求字符串必須是枚舉類對(duì)象的“名字”。如不是,會(huì)有運(yùn)行時(shí)異常。

package com.atguigu.java1;
public class TestSeason1 {

    public static void main(String[] args){
        Season1 spring = Season1.SPRING;
        System.out.println(spring);
        spring.show();
        System.out.println(spring.getSeasonName());
        
        System.out.println();
        //1.values():
        Season1[] seasons = Season1.values();
        for(int i = 0;i < seasons.length;i++){
            System.out.println(seasons[i]);
        }
        //2.valuesOf(String name):str里傳入的是字符串,輸出的是對(duì)象;
        //要求傳入的形參name是枚舉類對(duì)象的名字,否則報(bào)IllegalArgumentException
        
        String str = "SPRING";
        Season1 sea = Season1.valueOf(str);
        System.out.println(sea);
        System.out.println();
        
        //也可以輸出一下線程的生命周期
        Thread.State[] states = Thread.State.values();
        for (int i = 0; i < states.length; i++) {
            System.out.println(states[i]);
        }
    }

}

interface Info{
    void show();
}
//枚舉類
enum Season1 implements Info{
    SPRING("spring","春暖花開(kāi)"){
        public void show(){
            System.out.println("春天在哪里啊?");//實(shí)現(xiàn)枚舉對(duì)象的不同show()方法
        }
    },
    SUMMER("summer","夏日炎炎"){
        public void show(){
            System.out.println("夏天在這里");
        }
    },
    AUTOMN("automn","秋高氣爽"){
        public void show(){
            System.out.println("秋天是分手的季節(jié)");
        }
    },
    WINTER("winter","白雪皚皚"){
        public void show(){
            System.out.println("冬天里的一把火");
    }
    };//enum自己默認(rèn)一些東西,可以把相同的部分刪掉
    
    private final String seasonName;
    private final String seasonDesc;
    
    private Season1(String seasonName, String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    
    public void show(){
        System.out.println("這是一個(gè)季節(jié)");
    }
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
    
    @Override
    public String toString() {
        return "Season [seasonName=" + seasonName + ", seasonDesc="
                + seasonDesc + "]";
    }
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容