一、如何定義枚舉類
方式一: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.如果枚舉類中只有一個對象,則可以作爲單例模式的實現方式。
一個程序員的自我修養和成長........
.