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 Season
。ide
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; } }
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; } }
1)狀況一:實現接口,在enum
類中實現抽象方法。
2)狀況二:讓枚舉的對象分別實現接口中的抽象方法。code