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

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

-------android培訓java培訓、期待與您交流! ----------

列舉

列舉enum

列舉就是要讓某個型別的變數的取值,只能為若干個固定值中的一個,否則,編譯器報錯

列舉可以讓編譯器在編譯時就可以控制源程式中填寫的非法值,普通變數的方式在開發階段無法實現這一目標。

列舉是一種特殊的類,列舉中的每一個元素都是一個例項物件

用普通類如何實現列舉功能,定義一個Weekday的類來模擬列舉功能。

public abstract class WeekDay {
	//私有化該建構函式
	private WeekDay(){};
	//每一個元素都用靜態來表示
	public final static WeekDay SUN = new WeekDay(){

		//每一個元素都覆蓋其抽象方法
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return MON;
		}
		
	};
	public final static WeekDay MON = new WeekDay(){

		@Override
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}
		
	};
	
	//抽象方法
	public abstract WeekDay nextDay();
	
	public String toString(){
		return this==SUN?"SUN":"MON";
	}
}

package enume;

public class EumeDemo {
	public static void main(String []args){	
	
		WeekDay weekday = WeekDay.MON;
		System.out.println(weekday.nextDay());
	}
}	
列舉就相當於一個類,其中也可以定義構造方法、成員變數、普通方法和抽象方法。

列舉元素必須位於列舉體中的最開始部分,列舉元素列表的後要有分號與其他成員分隔。

把列舉中的成員方法或變數等放在列舉元素的前面,編譯器報告錯誤。

構造方法必須是私有的

在列舉物件後加上一個大括號,可以指定用那個構造方法

只要用到了列舉類,它裡面的所有物件(元素)都會被初始化

列舉只有一個成員時,就可以作為一種單例的實現方式。

public enum WeedDay1{
	
		SUN(),MON,TUE,WED,THI,FRI,SAT;
			
		private WeedDay1() {
			System.out.println("WeedDay1 run");
		}
		private WeedDay1(int day){
			System.out.println("WeedDay1 day run");
		}

	}
普通方法就是建立物件,然後呼叫

主要是抽象方法要注意,帶有抽象方法的列舉, 每個元素分別是由列舉類的子類來生成的例項物件,這些子類採用類似內部類的方式進行定義。

public enum TrafficLamp{
		
		//這些是列舉物件,但是列舉中用了抽象方法,而抽象方法是不能有物件的,只有子類覆蓋其所有抽象方法才可以,所以用到了內部類
		RED(30){
			public  TrafficLamp nextLamp(){
				
				return GREEN;
			}
		},
		GREEN(45){
			public  TrafficLamp nextLamp(){
				return YELLOW;
			}
		},
		YELLOW(5){
			public  TrafficLamp nextLamp(){
				return RED;
			}
		};
		private int time;
		//構造方法
		private TrafficLamp(int time){
			this.time = time;
		}
		//抽象方法
		public abstract TrafficLamp nextLamp();
		
	}
}	
列舉中的一些方法:

靜態方法:

valueOf(Class<T> enumType, String name) 返回帶指定名稱的指定列舉型別的列舉常量。

values()返回列舉內所有元素的陣列

非靜態:

name():返回常量名稱

ordinal():返回列舉常量的位置

getClass():返回類名

public enum WeekDay {
	SUN(),MON,TUE,WED,THI,FRI,SAT;
	
}

public class demo {

	public static void main(String[] args) {
		
		WeekDay wd = WeekDay.FRI;
		
		System.out.println(wd.valueOf("SUN"));//返回指定的列舉元素 SUN
		
		System.out.println(wd.getClass());//返回類名class WeekDay
		
		System.out.println(wd.name());//返回列舉元素名FRI
	
		System.out.println(wd.ordinal());//返回列舉元素位置5
		
		WeekDay[] dd = wd.values();//返回所有元素的陣列
		for(WeekDay ww:dd){
			System.out.print(ww+" ");	//SUN MON TUE WED THI FRI SAT 
		}
	}

}