天天看點

黑馬程式員_Java枚舉類型

---------------------- <a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">ASP.Net+Unity開發</a>、<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">.Net教育訓練</a>、期待與您交流! ----------------------

一、定義

一個類的對象是可一一列舉出來的,這個類可以定義為枚舉類。

二、特征

1.每一個枚舉值都是一個對象,即枚舉類型的執行個體是常量。

2.Java要求必須先定義enum執行個體,否則編譯器會報錯。其他定義的成員必須放到枚舉變量清單後。

3.一旦enum類的定義結束,編譯器就不允許我們再使用其構造器來建立任何執行個體了,是以一般情況下枚舉類中的構造器的限定修飾符為private。

4.所有的enum類都繼承自java.lang.Enum類,是以enum類不能繼承及其他的類,因為Java不能實作多重繼承。

三、常用API

ordinal(),用來表示某個特定enum常量的聲明順序。

values(),用來按照enum常量的聲明順序,産生由這些常量值構成的數組。

四、執行個體

1.帶構造方法的枚舉類舉例

/**
	 * 
	 * 帶構造方法枚舉類
	 * 類定義說明:一個星期有7天,是以有7個值,
	 */
	public enum WeekDay{
		
		SUN(0),MON,TUE,WED,THI,FRI,SAT;//枚舉類型執行個體
		
		/*
		 * 一旦enum類的定義結束,編譯器就不允許我們再使用其構造器來建立任何實
		 * 例了,是以一般情況下枚舉類中的構造器的限定修飾符為private。
		 */
		private WeekDay(){
			System.out.println("first");
		}
		
		private WeekDay(int day){
			System.out.println("second");
		}
	}
           

2.帶抽象方法和匿名内部類的枚舉類舉例

/**
	 * 帶抽象方法和匿名内部類的枚舉類舉例
	 * 交通燈例子,有3個執行個體,紅、黃、綠
	 */
	public enum TrafficLamp{
		
		RED(30){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return GREEN;
			}
			
		},
		GREEN(45){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return YELLOW;
			}
			
		},
		YELLOW(5){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return RED;
			}
			
		};
		
		public  abstract TrafficLamp nextLamp();//抽象方法
		
		private int time;//交通燈亮的時長。
		
		private TrafficLamp(int time){
			this.time=time;
		}
		
		public int getTime(){
			return time;
		}
	}
           

執行個體運作:

/**
 * 執行個體測試類
 */
public class EnumTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WeekDay weekDay =WeekDay.SUN;
		System.out.println(weekDay);
		System.out.println(weekDay.name());
		System.out.println(weekDay.ordinal());
		System.out.println(weekDay.valueOf("SUN"));//
		System.out.println(WeekDay.values().length);//按照定義順序組裝成數組。
		System.out.println("-----------------------------");
		TrafficLamp lamp=TrafficLamp.RED;
		System.out.println(lamp);
		System.out.println(lamp.name());
		System.out.println(lamp.ordinal());
		System.out.println(lamp.valueOf("RED"));//
		System.out.println(lamp.values().length);//按照定義順序組裝成數組。
		System.out.println(lamp.getTime());
		

	}
}
           

 ---------------------- <a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">ASP.Net+Unity開發</a>、<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">.Net教育訓練</a>、期待與您交流! ----------------------

詳細請檢視:<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">www.itheima.com</a>