Java(4)列舉類
阿新 • • 發佈:2020-11-20
@[TOC]
## 一、列舉類簡介
1. 類的物件**確定且有限**,就成為列舉類。
2. 當需要**定義一組常量**時,使用列舉類。
3. 如果列舉類只有一個物件,則可以作為**單例模式的實現方式**。
## 二、自定義列舉類
### 1、方式一:jdk5.0之前,自定義列舉類
1. 程式碼實現
```java
class Season{
//1.屬性要定義為 private final的
private final String seasonName;
private final String seasonDesc;
//2.構造器私有化(因為屬性是final的,所以要在構造器中初始化)
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("冬天","我是冬天");
}
```
### 2、方式二:jdk5.0,用enum關鍵字定義列舉類
1. 程式碼實現
```java
enum Season1{
//1.提供列舉類的物件
SPRING("春天","我是春天"),
SUMMER("夏天","我是夏天"),
AUTUMN("秋天","我是秋天"),
WINTER("冬天","我是冬天");
//2.定義屬性,宣告為private final
private final String seasonName;
private final String seasonDesc;
//3.私有化構造器,並給物件賦值
private Season1(String seasonName, String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.額外需求:get()方法
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
```
2. 說明
1. 列舉類的物件在第一行宣告,用逗號分隔,分號結尾。不用自己加 `public static final`,因為系統會自動新增。也不用加`new + 構造器`來建立。
2. enum定義的列舉類預設繼承 `java.lang.Enum類`,因此不能再繼承其他類。可以通過
## 三、Enum類的主要方法
### 1、toString()
1. 返回當前列舉類物件的名字。
2. 預設輸出物件和呼叫toString是一樣效果
### 2、values()
1. 靜態方法
2. 返回列舉型別的物件陣列,可以方便的遍歷所有列舉值。
### 3、valueOf(String str)
1. 靜態方法
2. 把一個字串轉換為對應的列舉類物件。
3. 名字必須一致,否則會出異常: `IllegalArgumentException: No enum constant com.lzx.java.Season1.spring`
## 四、使用enum關鍵字定義的列舉類去實現介面
### 1、情況一
- 實現介面,在enum類中實現抽象方法即可
### 2、情況二:
- 每個物件分別去實現抽象方法,則不同的物件呼叫各自實現的抽象