1. 程式人生 > >黑馬程式設計師_java高新技術之列舉

黑馬程式設計師_java高新技術之列舉

---------------------- ASP.Net+Unity開發.Net培訓、期待與您交流! ----------------------  

列舉:
關鍵字 enum
列舉就是要讓某個型別的變數的取值只能為若干固定值之中的一個。
是一個特殊的類,其中的每一個元素都是該類的一個物件。

注意 : 因為不能New 列舉的實力,所以列舉不能繼承其他類,也不能被其他類繼承。

 為什麼要有列舉?
      問題:要定義星期幾或性別的變數,該怎麼定義?假設用1-7分別表示星期一到星期日,但有人可能會寫成int weekday = 0;或即使使用常量方式也無法阻止意外。
列舉就是要讓某個型別的變數的取值只能為若干個固定值中的一個,否則,編譯器就會報錯。列舉可以讓編譯器在編譯時就可以控制源程式中填寫的非法值,普通變數的方式在開發階段無法實現這一目標。
 
    用普通類如何實現列舉功能,定義一個Weekday的類來模擬列舉功能。 
    1、私有的構造方法。
    2、每個元素分別用一個公有的靜態成員變量表示。
     可以有若干公有方法或抽象方法。採用抽象方法定義nextDay就將大量的if.else語句轉移成了一個個獨立的類
 enum TrafficLamp{
	/**
	 * 對於這道題目而言,使用的其實是匿名物件內部類!
	 * 列舉最簡單的建立物件方法:RED,YELLOW,GREEN
	 * 對於普通的類而言,建立物件:Person p = new Person();
	 * 
	 */
	
	RED(30){

		@Override
		public TrafficLamp nextLamp() {
			return YELLOW;
		}
		
	},
	
	YELLOW(40){

		@Override
		public TrafficLamp nextLamp() {
			return GREEN;
		}
		
	},
	
	GREEN(45){

		@Override
		public TrafficLamp nextLamp() {
			return RED;
		}
		
	};
	public abstract TrafficLamp nextLamp();
	private int time;
	private TrafficLamp(int time){
		this.time = time;
	}
	public int getTime() {
		return time;
	}
	public void setTime(int time) {
		this.time = time;
	}
	
}

public class EnumDemo4 {
	public static void main(String[] args) {
		System.out.println(TrafficLamp.RED.nextLamp());
		System.out.println(TrafficLamp.RED.nextLamp().getTime());
		
	}
}