1. 程式人生 > 實用技巧 >【Java】列舉

【Java】列舉

列舉

列舉:Enum子類,final修飾 自jdk5.0

常用方法:
		values(); 獲取列舉類內的所有列舉值,返回當前列舉類型別的陣列
		name(); 獲取列舉值(列舉類的物件)的名字
		ordinal();獲取列舉值的序號
列舉語法:
	①在最最後的列舉值後加分號,然後定義屬性、方法、構造方法
	②列舉的構造方法,必須為私有,預設也是私有
	③列舉內的抽象方法,該方法必須由每個列舉值來實現(可用內部類實現)

1).建立列舉類

①:是個類,並且這個類的物件是構造好的,不允許使用者構造該類的新物件
	常用方法:
		values(); 獲取列舉類內的所有列舉值,返回當前列舉類型別的陣列
		name(); 獲取列舉值(列舉類的物件)的名字
		ordinal();獲取列舉值的序號
	
	用法:
//enum 繼承自Enum
enum Season { //建立列舉類Season
			SPRING , SUMMER , AUTUMN ,WINTER
}
main: 	Season s = Season.SUMMER;
		System.out.println(s.name());//列印s物件的名稱
		System.out.println(s.ordinal());//列印s物件所在的序號
		//遍歷列舉類內的列舉值
		Season[] arrSeason = Season.values();
		for(Season ss : arrSeason) {
			System.out.println(ss.name());
		}

2).列舉類的構造方法

②:是個特殊的類,是Enum的子類,它所有的構造方法是私有的(private,不能被子類繼承的特性),可以有屬性,一旦有有參構造,則需要其內部的列舉值(列舉物件)也需要構造
	
用法:
//enum 繼承自Enum
enum Season {
	SPRING("春季", 1, 3),
	SUMMER("夏季", 4, 6),
	AUTUMN("秋季", 7, 9),
	WINTER("冬季", 10, 12); //構造後,最後一個物件需要有“;”
	
	String name;
	private int startMonth;
	private int endMonth;
	//省略getters/setters
	Season(String name, int startMonth, int endMonth) {//構造方法,預設private
		this.name= name;
		this.startMonth = startMonth;
		this.endMonth = endMonth;
	}
}
main():	Season s = Season.SUMMER;
		System.out.println(s.getName() + “開始月份是” + s.getStartMonth());

3).列舉類的抽象方法

③:列舉類的內部可以有抽象方法。列舉類的本身是被final修飾的,不能被繼承,故不存在子類實現其抽象方法。
所以其抽象方法是供內部的列舉值(列舉物件)實現的
	
用法:
	//enum 繼承自Enum
enum Season {
	SPRING("春季", 1, 3) {
		@Override  //覆蓋抽象方法
		public void describe() {
			System.out.println("春燕銜春泥");
		}
	},
	SUMMER("夏季", 4, 6) {
		@Override //覆蓋抽象方法
		public void describe() {
			System.out.println("夏天很炎熱");
		}
	},
	AUTUMN("秋季", 7, 9) {
		@Override //覆蓋抽象方法
		public void describe() {
			System.out.println("秋天落葉黃");
		}
	},
	WINTER("冬季", 10, 12) {
		@Override //覆蓋抽象方法
		public void describe() {
			System.out.println("大雪深數尺");
		}
	};
	
	String name;
	private int startMonth;
	private int endMonth;
	//省略getters/setters
	Season(String name, int startMonth, int endMonth) {//構造方法,預設private
		this.name= name;
		this.startMonth = startMonth;
		this.endMonth = endMonth;
	}
	
	public abstract void describe();//一個方法實現描述
}
main():	Season s = Season.SUMMER;
		s.describe ();