Java基礎(3):枚舉類

1 枚舉類入門

  • 對於對象有限且固定的類,使用枚舉類。
  • 使用enum關鍵字定義枚舉類。(enum關鍵字和class、interface的作用相似)
  • 枚舉類注意事項:
    • 枚舉類默認繼承java.lang.Enum類。
    • 非抽象枚舉類默認使用final修飾,不能派生子類。
    • 枚舉類的實例必須在枚舉類的第一行顯式列出。(枚舉類的實例只能是枚舉值)
package org.ywq.enumclass;

public enum SeasonEnum{
    //在第一行列出枚舉實例
    SPRING,SUMMER,FALL,WINTER;
}

注意

  1. 枚舉類的實例通過類名.實例名調用。
  2. 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));
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章