Java基礎教程——枚舉類型


枚舉類型

枚舉類型在JDK 5時引入。

	enum WeekEnum {
		MONDAY, TUESDAY, WEDNESDAY, THURDAY, FRIDAY, SATURDAY, SUNDAY
	}

Java的枚舉類java.lang.Enum中,有:
|--private final String name;(定義時可表意的標識符)
|--private final int ordinal;(序數,從0開始)
|--及對應的獲取方法。

public class Enum1Common {
	enum WeekEnum {
		MONDAY, TUESDAY, WEDNESDAY, THURDAY, FRIDAY, SATURDAY, SUNDAY
	}
	public static void main(String[] args) {
		System.out.println("枚舉類型標識符:" + WeekEnum.FRIDAY);
		for (WeekEnum day : WeekEnum.values()) {
			System.out.print("直接輸出:" + day);// toString()
			System.out.print("\t name:" + day.name());
			System.out.println("\t ordinal:" + day.ordinal());// 序數
		}
	}
}

枚舉類型標識符:FRIDAY
直接輸出:MONDAY name:MONDAY ordinal:0
直接輸出:TUESDAY name:TUESDAY ordinal:1
直接輸出:WEDNESDAY name:WEDNESDAY ordinal:2
直接輸出:THURDAY name:THURDAY ordinal:3
直接輸出:FRIDAY name:FRIDAY ordinal:4
直接輸出:SATURDAY name:SATURDAY ordinal:5
直接輸出:SUNDAY name:SUNDAY ordinal:6

*枚舉是“特殊的類”

枚舉類型是一種“特殊的類”,
它可以有自己的屬性和方法(包括構造方法)。
枚舉類的構造器只能使用private訪問控制符;
如果省略訪問控制符,還是private。

// 枚舉類也可以有變量和方法
public class Enum2Member {
	public static void main(String[] args) {
		System.out.println(GenderEnum.MALE + ":" + GenderEnum.MALE.getLabel());
		// Enum.valueOf():獲取指定枚舉類的枚舉值
		GenderEnum g = Enum.valueOf(GenderEnum.class, "FEMALE");
		System.out.println(g + ":" + g.getLabel());
	}
}
enum GenderEnum {
	MALE("男"), FEMALE("女");// 必須第一行
	// ----------------------------------
	// 枚舉類的屬性值應該使用private final修飾
	private final String label;
	// 枚舉類一旦寫帶參構造器(必須private),列出枚舉值時必須傳參
	private GenderEnum(String label) {
		this.label = label;
	}
	public String getLabel() {
		return this.label;
	}
}
MALE:男
FEMALE:女

*枚舉類可以實現接口

// 枚舉類可以繼承接口
public class Enum3Impl {
	public static void main(String[] args) {
		System.out.println(ImplEnum.PLUS.eval(3, 2));
		System.out.println(ImplEnum.MINUS.eval(3, 2));
	}
}
interface IOperation {
	double eval(double x, double y);
}
enum ImplEnum implements IOperation {
	PLUS {
		public double eval(double x, double y) {
			return x + y;
		}
	},
	MINUS {
		public double eval(double x, double y) {
			return x - y;
		}
	}
}
5.0
1.0

*枚舉類的抽象方法

枚舉類本身可以定義抽象方法,由各枚舉值實現。

// 枚舉類可以定義“抽象方法”,並由枚舉值實現
public class Enum4Abstract {
	public static void main(String[] args) {
		System.out.println(AbstractEnum.TIMES.eval(3, 2));
		System.out.println(AbstractEnum.DIVIDE.eval(3, 2));
	}
}
enum AbstractEnum {
	TIMES {
		public double eval(double x, double y) {
			return x * y;
		}
	},
	DIVIDE {
		public double eval(double x, double y) {
			return x / y;
		}
	};
	// 定義抽象方法(必須在枚舉值之后定義)
	// 由各枚舉值 提供 具體實現
	public abstract double eval(double x, double y);
}
6.0
1.5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM