天天看點

java枚舉應用(一)

/**
 * 簡單枚舉
 * @author littlehow
 *
 */
public enum Week {
	//周一到周日,不重寫其toString的情況,預設為字面量
	Monday(1), Tuesday(2), Wednesday(3), Thursday(4), Friday(5), Saturday(6), Sunday(0);
	private int day;
	Week(int day) {
		this.day = day;
	}
	
	/**
	 * 根據數字天數傳回對應枚舉
	 * @param day  0-6之間的天數
	 * @return
	 */
	public static Week valueOf(int day) {
		if (day < 0 || day > 6 ) throw new IllegalArgumentException("no enum day is " + day);
		Week w = null;
		//數字都在可控範圍,不需要default
		switch (day) {
		case 0 : 
			w = Sunday; break;
		case 1 : 
			w = Monday; break;
		case 2 : 
			w = Tuesday; break;
		case 3 : 
			w = Wednesday; break;
		case 4 : 
			w = Thursday; break;
		case 5 : 
			w = Friday; break;
		case 6 : 
			w = Saturday;
		}
		return w;
	}
	
	/**
	 * 擷取對應的數值
	 * @return
	 */
	public int getDay() {
		return this.day;
	}
	
	/**
	 * 對枚舉的一些基本操作
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(Monday);//輸出Monday
		/** 根據字面量擷取枚舉執行個體 */
		Week w = Week.valueOf("Thursday");
		System.out.println(w.getDay());//4
		/** 根據數字天數擷取 */
		w = Week.valueOf(2);
		System.out.println(w);//Tuesday
		try {
			/** 超出範圍則抛出異常 */
			w = Week.valueOf(8);
		} catch (Exception e) {
			System.out.println(e.getMessage());//no enum day is 8
		}
		
		try {
			/** 設定一個沒有字面量的枚舉 */
			w = Week.valueOf("ME");
		} catch (Exception e) {
			System.out.println(e.getMessage());//No enum constant Week.ME
		}
		
		//枚舉可作為switch控制語句
		java.util.Random r = new java.util.Random();
		for (int i = 0; i < 3; i ++) {
			w = Week.valueOf(r.nextInt(7));//随機三次0-6,看看不同的輸出咯
			switch (w) {
			case Monday :
				System.out.println("今天是周一,又要開始上班了,嗚嗚..."); break;
			case Tuesday :
				System.out.println("今天是周二,昨天上班好累啊."); break;
			case Wednesday :
				System.out.println("一晃就周三啦,還有兩天放假了,哈哈..."); break;
			case Thursday :
				System.out.println("周四了,今天都幹了啥呢?"); break;
			case Friday :
				System.out.println("請大吼一句:老夫明天不上班!!"); break;
			case Saturday :
			case Sunday :
				System.out.println("好好放松啦,得之不易的周末哎!"); break;
			default :
				System.out.println("昏天暗地,不知時日啊!");
			}
		}
	}
}