文章目錄
-
- 一、什麼是枚舉類
- 二、自定義枚舉類
- 三、使用enum關鍵字枚舉類
- 四、枚舉類常用方法
- 五、讓enum枚舉類對象分别實作接口
一、什麼是枚舉類
枚舉類型用于聲明一組命名的常數,當一個變量隻有幾種已知的取值時,可以将它定義為枚舉類型。
例如:
- 每星期的星期一到星期日
- 每月的一月到十二月
- 四季的春夏秋冬
- …
二、自定義枚舉類
建立步驟
- 聲明對象的屬性
- 提供私有構造函數
- 提供目前枚舉類中的對象
- 提供Get方法/重寫toString()
/**
* 自定義枚舉類
*/
class Week {
// 1. 聲明Week對象屬性
private final String weekName;
private final String color;
//2. 提供私有構造函數
private Week(String weekName, String color) {
this.weekName = weekName;
this.color = color;
}
//3. 提供目前枚舉類中的對象
public static final Week Monday = new Week("星期一", "黑色");
public static final Week Tuesday = new Week("星期二", "綠色");
public static final Week Wednesday = new Week("星期三", "黃色");
public static final Week Thursday = new Week("星期四", "藍色");
public static final Week Friday = new Week("星期五", "紅色");
public static final Week Saturday = new Week("星期六", "青色");
public static final Week Sunday = new Week("星期日", "白色");
//4.提供get方法擷取枚舉類的屬性
public String getWeekName() {
return weekName;
}
public String getColor() {
return color;
}
//5. 重寫toString()
@Override public String toString() {
return "Week{weekName='" + weekName + ", color='" + color + "'}";
}
}
三、使用enum關鍵字枚舉類
建立步驟
- 提供目前枚舉類對象,多個對象之間用 ‘,’ 隔開,末尾用 ‘;’ 結束
- 聲明對象的屬性
- 提供構造函數
- 提供目前枚舉類中的對象
- 提供Get方法/重寫toString()
/**
* 使用enum關鍵字枚舉類
*/
enum EWeek {
// 1. 提供目前枚舉類對象,多個對象之間用 ',' 隔開,末尾用 ';' 結束
Monday("星期一", "黑色"),
Tuesday("星期二", "綠色"),
Wednesday("星期三", "黃色"),
Thursday("星期四", "藍色"),
Friday("星期五", "紅色"),
Saturday("星期六", "青色"),
Sunday("星期日", "白色");
// 2. 聲明Week對象屬性
private final String weekName;
private final String color;
// 3. 構造函數,給對象指派
EWeek(String weekName, String color) {
this.weekName = weekName;
this.color = color;
}
//4.擷取枚舉類的屬性
public String getWeekName() {
return weekName;
}
public String getColor() {
return color;
}
//5. 重寫toString()
@Override public String toString() {
return "Week{weekName='" + weekName + ", color='" + color + "'}";
}
}
四、枚舉類常用方法
- toString():輸出對象
- values():傳回所的枚舉類對象構成的數組
- valueOf(String objName):傳回枚舉類中對象名是objName的對象。
public class EnumDemo {
public static void main(String[] args) {
EWeek week = EWeek.Monday;
//1. 調用toString
System.out.println("--------------toString()-------------");
System.out.println(week);
//2. 傳回所的枚舉類對象構成的數組
System.out.println("------------values()---------------");
EWeek[] weeks = EWeek.values();
System.out.println(Arrays.toString(weeks));
System.out.println("-------------valueOf(String objName)--------------");
//3. valueOf(String objName):傳回枚舉類中對象名是objName的對象。
EWeek week1 = EWeek.valueOf("Monday");
System.out.println(week1);
//如果沒objName的枚舉類對象,則抛異常:IllegalArgumentException
System.out.println("--------------測試無objName對象-------------");
EWeek week2 = EWeek.valueOf("aaaa");
}
}
輸出結果
五、讓enum枚舉類對象分别實作接口
public class EnumInterfaceDemo {
public static void main(String[] args) {
EWeeks eWeeks = EWeeks.Monday;
eWeeks.show();
}
}
interface Info{
void show();
}
/**
* 使用enum關鍵字枚舉類
*/
enum EWeeks implements Info{
// 1. 提供目前枚舉類對象,多個對象之間用 ',' 隔開,末尾用 ';' 結束
Monday("星期一", "黑色"){
@Override public void show() {
System.out.println(this.getWeekName() + " 是 " + this.getColor());
}
},
Tuesday("星期二", "綠色"){
@Override public void show() {
System.out.println(this.getWeekName() + " 是 " + this.getColor());
}
},
Wednesday("星期三", "黃色"){
@Override public void show() {
System.out.println(this.getWeekName() + " 是 " + this.getColor());
}
},
Thursday("星期四", "藍色"){
@Override public void show() {
System.out.println(this.getWeekName() + " 是 " + this.getColor());
}
},
Friday("星期五", "紅色"){
@Override public void show() {
System.out.println(this.getWeekName() + " 是 " + this.getColor());
}
},
Saturday("星期六", "青色"){
@Override public void show() {
System.out.println(this.getWeekName() + " 是 " + this.getColor());
}
},
Sunday("星期日", "白色"){
@Override public void show() {
System.out.println(this.getWeekName() + " 是 " + this.getColor());
}
};
// 2. 聲明Week對象屬性
private final String weekName;
private final String color;
// 3. 構造函數,給對象指派
EWeeks(String weekName, String color) {
this.weekName = weekName;
this.color = color;
}
//4.擷取枚舉類的屬性
public String getWeekName() {
return weekName;
}
public String getColor() {
return color;
}
//5. 重寫toString()
@Override public String toString() {
return "Week{weekName='" + weekName + ", color='" + color + "'}";
}
}