1 枚舉類入門
- 對於對象有限且固定的類,使用枚舉類。
- 使用
enum關鍵字
定義枚舉類。(enum關鍵字和class、interface的作用相似) - 枚舉類注意事項:
- 枚舉類默認繼承
java.lang.Enum
類。 - 非抽象枚舉類默認使用
final
修飾,不能派生子類。 - 枚舉類的實例必須在枚舉類的第一行顯式列出。(枚舉類的實例只能是枚舉值)
- 枚舉類默認繼承
package org.ywq.enumclass;
public enum SeasonEnum{
//在第一行列出枚舉實例
SPRING,SUMMER,FALL,WINTER;
}
注意:
- 枚舉類的實例通過
類名.實例名
調用。 - switch的控制表達式可以是任何枚舉類型,case表達式的值可以直接用枚舉值的名字,不需要添加枚舉類作爲限定。
package org.ywq.enumclass;
public class EnumClassTest {
public void judge(SeasonEnum s) {
switch (s) {
case SPRING:
System.out.println("春暖花開");
break;
case SUMMER:
System.out.println("夏日炎炎");
break;
case FALL:
System.out.println("秋高氣爽");
break;
case WINTER:
System.out.println("冬日飄雪");
break;
}
}
public static void main(String[] args) {
for (SeasonEnum s : SeasonEnum.values()) {
System.out.println(s);
}
new EnumClassTest().judge(SeasonEnum.SPRING);
}
}
2 java.lang.Enum類
常用方法
Enum類的常用方法,可以由用戶自己定義的枚舉類使用。(繼承)
Modifier and Type | Method | Description |
---|---|---|
String | name() | 返回此枚舉實例的名稱 |
public static <T extends Enum>T | valueOf(Class enumType, String name) | 返回枚舉類中指定名稱的枚舉值 |
3 枚舉類的成員變量和方法
- 枚舉類的成員變量建議都設爲
private final
. - 枚舉類的構造方法一般顯式定義帶參數,因爲枚舉值要調用對應的構造器來創建,所以列出的枚舉值也必須傳入參數。
- 枚舉類構造器使用
private
修飾,即不能新建枚舉類對象。public enum Gender{ //枚舉值要調用對應的構造器來創建 MALE("男"),FEMALE("女"); //等價於:public static final Gender MALE = new Gender("男"); // public static final Gender FEMALE = new Gender("女"); private final String name; //構造器 private Gender(String name){ this.name=name; } public String getName(){ return this.name; } }
4 枚舉類實現接口
枚舉類可以和普通類一樣實現接口,但這種實現使得每個枚舉實例的接口實現方法都一樣。若要爲每個枚舉值提供不同實現方式,參照匿名對象實現:
//接口
public interface GenderDesc{
void info();
}
//枚舉類實現接口
public enum Gender implements GenderDesc{
MALE("男"){
public void info(){
System.out.println("這個枚舉值代表男性");
}
},
FEMALE("女"){
public void info(){
System.out.println("這個枚舉值代表女性");
}
};
private final String name;
private Gender(String name){
this.name=name;
}
}
注意:此時的枚舉值不是Gender枚舉類的實例,而是Gender的匿名子類的實例。
5 抽象枚舉類
- 枚舉類中有抽象方法時,系統自動爲其添加
abstract關鍵字
,不能手動添加。 - 枚舉值中要重寫枚舉類的抽象方法。
package org.ywq.absenumclass;
public enum Operation {
ADD {
public double oper(double x, double y) {
return x + y;
}
},
SUB {
public double oper(double x, double y) {
return x - y;
}
},
MUL {
public double oper(double x, double y) {
return x * y;
}
},
DIV {
public double oper(double x, double y) {
return y == 0 ? y : x / y;
}
};
// 抽象方法
public abstract double oper(double x, double y);
public static void main(String[] args) {
System.out.println(Operation.ADD.oper(1.2, 2.1));
System.out.println(Operation.SUB.oper(1.2, 2.1));
System.out.println(Operation.MUL.oper(1.2, 2.1));
System.out.println(Operation.DIV.oper(1.2, 2.1));
}
}