自定義枚舉和enum枚舉類

一、如何定義枚舉類

方式一:jdk5.0之前,自定義枚舉類

方式二:jdk5.0,可以使用enum關鍵字定義枚舉類

 

一、自定義枚舉類

//自定義枚舉類
class Season{
    //1.聲明Season對象的屬性:private final修飾
    private final String seasonName;
    private final String seasonDesc;

    //2.私有化類的構造器,並給對象屬性賦值
    private Season(String seasonName,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    //3.提供當前枚舉類的多個對象:public static final的
    public static final Season SPRING = new Season("春天","春暖花開");
    public static final Season SUMMER = new Season("夏天","夏日炎炎");
    public static final Season AUTUMN = new Season("秋天","秋高氣爽");
    public static final Season WINTER = new Season("冬天","冰天雪地");

    //4.其他訴求1:獲取枚舉類對象的屬性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
    //4.其他訴求1:提供toString()
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

public class SeasonTest {

    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);

    }

}

 

二、enum關鍵字枚舉類,

區別在於省略對象的修飾符,提供了公用方法。

/**
 * 二、使用enum關鍵字定義的枚舉類實現接口的情況
 *  情況一:實現接口,在enum類中實現抽象方法
 *  情況二:讓枚舉類的對象分別實現接口中的抽象方法
 */

interface Info{
    void show();
}

/**
 * 使用enum關鍵字枚舉類 
 * 說明:定義的枚舉類默認繼承於java.lang.Enum類
 */

enum Season1 implements Info{
    //1.提供當前枚舉類的對象,多個對象之間用","隔開,末尾對象";"結束
    SPRING("春天","春暖花開"){
        @Override
        public void show() {
            System.out.println("春天在哪裏?");
        }
    },
    SUMMER("夏天","夏日炎炎"){
        @Override
        public void show() {
            System.out.println("寧夏");
        }
    },
    AUTUMN("秋天","秋高氣爽"){
        @Override
        public void show() {
            System.out.println("秋天不回來");
        }
    },
    WINTER("冬天","冰天雪地"){
        @Override
        public void show() {
            System.out.println("大約在冬季");
        }
    };

    //2.聲明Season對象的屬性:private final修飾
    private final String seasonName;
    private final String seasonDesc;

    //2.私有化類的構造器,並給對象屬性賦值

    private Season1(String seasonName,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    //4.其他訴求1:獲取枚舉類對象的屬性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
//    //4.其他訴求1:提供toString()
//
//    @Override
//    public String toString() {
//        return "Season1{" +
//                "seasonName='" + seasonName + '\'' +
//                ", seasonDesc='" + seasonDesc + '\'' +
//                '}';
//    }


    /**
     * 接口方法可以放在每個枚舉參數上,也可以放在類中,如下
     */
//    @Override
//    public void show() {
//        System.out.println("這是一個季節");
//    }
}

 

三、 Enum類中的常用方法: 

1.values()方法:返回枚舉類型的對象數組。該方法可以很方便地遍歷所有的枚舉值。
2.valueOf(String str):可以把一個字符串轉爲對應的枚舉類對象。要求字符串必須是枚舉類對象的“名字”。如不是,會有運行時異常:IllegalArgumentException。
3.toString():返回當前枚舉類對象常量的名稱

/**
 * 使用enum關鍵字定義枚舉類
 * 說明:定義的枚舉類默認繼承於java.lang.Enum類

 */
public class SeasonTest1 {
    public static void main(String[] args) {
        Season1 summer = Season1.SUMMER;
        //toString():返回枚舉類對象的名稱
        System.out.println(summer.toString());

//        System.out.println(Season1.class.getSuperclass());
        System.out.println("**************** 舉例以上Season1枚舉類");
        //values():返回所有的枚舉類對象構成的數組
        Season1[] values = Season1.values();
        for(int i = 0;i < values.length;i++){
            System.out.println(values[i]);
            values[i].show();
        }
        
        System.out.println("**************** 舉例系統的Thread.State枚舉類");
        Thread.State[] values1 = Thread.State.values();
        for (int i = 0; i < values1.length; i++) {
            System.out.println(values1[i]);
        }

        //valueOf(String objName):返回枚舉類中對象名是objName的對象。
        Season1 winter = Season1.valueOf("WINTER");
        //如果沒有objName的枚舉類對象,則拋異常:IllegalArgumentException
//        Season1 winter = Season1.valueOf("WINTER1");
        System.out.println(winter);
        winter.show();
    }
}

 

四、 枚舉類的使用

* 1.枚舉類的理解:類的對象只有有限個,確定的。我們稱此類爲枚舉類
* 2.當需要定義一組常量時,強烈建議使用枚舉類
* 3.如果枚舉類中只有一個對象,則可以作爲單例模式的實現方式。

 

 

 

 

一個程序員的自我修養和成長........

 

 

 .

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