枚舉類
如果一個類的對象是有限和固定的,則可以使用枚舉類。本筆記,主要介紹基本的枚舉類使用:基本語法和實例。
目錄
正文
1. 枚舉類-語法
1.1 枚舉類與普通類相同之處
* enum 與 class、interface 具有相同地位; * 可以繼承多個接口; * 可以擁有構造器、成員方法、成員變量;1.2 枚舉類與普通類不同之處
* 默認繼承 java.lang.Enum 類,所以不能繼承其他父類;其中 java.lang.Enum 類實現了 java.lang.Serializable 和 java.lang.Comparable 接口; * 使用 enum 定義,默認使用 final 修飾,因此不能派生子類; * 構造器默認使用 private 修飾,且只能使用 private 修飾; * 枚舉類所有實例必須在第一行給出,默認添加 public static final 修飾,否則無法產生實例;1.3 實例
```java public class Demo {public static void main(String[] args) {
for(Season s : Season.values()) { //values() 方法,返回 Season[] 枚舉值集合
new SeasonTest().judge(s);
}
}
}
enum Season {
SPRING, SUMMER, FALL, WINTER;
}
class SeasonTest {
public void judge(Season s) {
switch(s) { //JDK 1.5 之后,switch 支持枚舉類型;且,case 后面可以直接書寫枚舉值,不需要限定
case SPRING:
System.out.println("Spring");
break;
case SUMMER:
System.out.println("Summer");
break;
case FALL:
System.out.println("Fall");
break;
case WINTER:
System.out.println("Winter");
break;
}
}
<h3 id="1.4"> 1.4 成員變量、構造器和方法</h3>
#### 1.4.1 成員變量實例
```java
public class Demo {
public static void main(String[] args) {
// valueOf 是 Enum 中的靜態方法,用於:返回指定枚舉類中,指定名稱的枚舉值
// 源碼聲明:
// public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
Gender tom = Gender.valueOf(Gender.class, "FEMALE");
tom.name = "female";
System.out.println(tom + " + " + tom.name);
}
}
enum Gender {
MALE, FEMALE;
public String name;
}
1.4.2 構造器
enum Gender {
MALE("男"), FEMALE("女");
private final String name; //應該設置成 private final
private Gender(String name) { // 應該設置成 private
this.name = name;
}
public String getName() {
return this.name;
}
}
1.4.3 方法
//1. 實現接口方法(1)
interface Info {
void info();
}
enum Gender implements Info{
MALE("男"), FEMALE("女");
private final String name;
private Gender(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
@Override
public void info() {
// 此時兩個值調用的方法是相同的
}
}
////1. 實現接口方法(2)
interface Info {
void info();
}
enum Gender implements Info{
MALE("男") {
@Override
public void info() {
// 分別實現接口方法
}
},
FEMALE("女") {
@Override
public void info() {
// 分別實現接口方法
}
};
private final String name;
private Gender(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
//2. 實現 Enum 中的抽象方法
enum Gender {
MALE("男"){
@Override
public void info() {
// TODO Auto-generated method stub
}
},FEMALE("女"){
@Override
public void info() {
// TODO Auto-generated method stub
}
};
private final String name;
private Gender(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public abstract void info();
}