1. 程式人生 > >Java基礎(3):列舉類

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));
	}
}