JAVA_基礎枚舉類

枚舉類的理解

1)類的對象只有有限個,肯定的。
2)當須要定義一組常量時,強烈建議使用枚舉類。
3)若是枚舉類中只有一個對象,則能夠做爲單例模式的實現方式。java

如何定義枚舉類

方式一:JDK5.0以前,自定義枚舉類。spring

public class SeasonTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);
    }
}
//自定義枚舉類
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.其它訴求:獲取枚舉類對象的屬性
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
    //5.其它訴求:提供toString方法
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

方式二:JDK5.0,能夠使用enum關鍵字定義枚舉類。數組

1)定義的枚舉類默認繼承於java.lang.Enum類。
2)能夠省去public final static Season = new Seasonide

public class SeasonenumTest {
    public static void main(String[] args) {
        Season1 season1 = Season1.AUTUMN;
        System.out.println(season1);
        System.out.println(Season1.class.getSuperclass());
    }
}
enum Season1 {
    //1.提供當前枚舉類的多個對象,多個對象之間用逗號隔開,末尾用分號結束。
    SPRING("春天","春暖花開"),
    SUMMER("夏天","夏日炎炎"),
    AUTUMN("秋天","秋高氣爽"),
    WINTER("冬天","白雪皚皚");
    //2.聲明Season對象的屬性:private final修飾
    private final String seasonDesc;
    private final String seasonName;
    //3.私有化類的構造器,並給對象賦值
    private Season1(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //4.其它訴求:獲取枚舉類對象的屬性
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
}

Enum類的主要方法

values():返回枚舉類型的對象數組。該方法能夠很方便地遍歷全部的 枚舉值。
valueOf(String str):能夠把一個字符串轉爲對應的枚舉類對象。要求字符 串必須是枚舉類對象的「名字」。如不是,會有運行時異常: IllegalArgumentException
toString():返回當前枚舉類對象常量的名稱。this

public class SeasonenumTest {
    public static void main(String[] args) {
        Season1 season1 = Season1.AUTUMN;
        //toString()
        System.out.println(season1.toString());
        System.out.println(Season1.class.getSuperclass());
        System.out.println("***********************");
        //values()
        Season1[] values = Season1.values();
        for(int i = 0; i < values.length; i++) {
            System.out.println(values[i]);
        }
        System.out.println("***********************");
        Thread.State[] values1 = Thread.State.values();
        for (int i = 0; i < values1.length; i++) {
            System.out.println(values1[i]);
        }
        //valuesOf(String objName):返回枚舉類中對象名是objName的對象。
        //若是沒有objName的枚舉類對象,則拋異常:IllegalArgumentException
        Season1 winter = Season1.valueOf("WINTER");
        System.out.println(winter);
    }
}
enum Season1 {
    //1.提供當前枚舉類的多個對象,多個對象之間用逗號隔開,末尾用分號結束。
    SPRING("春天","春暖花開"),
    SUMMER("夏天","夏日炎炎"),
    AUTUMN("秋天","秋高氣爽"),
    WINTER("冬天","白雪皚皚");
    //2.聲明Season對象的屬性:private final修飾
    private final String seasonDesc;
    private final String seasonName;
    //3.私有化類的構造器,並給對象賦值
    private Season1(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //4.其它訴求:獲取枚舉類對象的屬性
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
}

使用enum關鍵字定義的枚舉類實現接口的狀況

1)狀況一:實現接口,在enum類中實現抽象方法。
2)狀況二:讓枚舉的對象分別實現接口中的抽象方法。code

相關文章
相關標籤/搜索