Java高新技术 枚举
?Java高新技術?? 枚舉
知識概要:
??????????????? (1)為什么要有枚舉
??????????????? (2)枚舉的示例
??????????????? (3)枚舉的應用
??????????????? (4)枚舉的高級應用
(1)為什么需要枚舉
????問題:要定義星期幾或性別的變量,該怎么定義?
???????????? ?假設用1-7分別表示星期一到星期日,但有人可能會寫成int weekday = 0;
???????????? ?或即使使用常量方式也無法阻止意外。
???????????? ?枚舉就是要讓某個類型的變量的取值只能為若干個固定值中的一個,??
?????????? ?? 編譯器就會報錯。枚舉可以讓編譯器在編譯時就可以控制源程序中填寫的非法值,
???????? ??? ?普通變量的方式在開發階段,無法實現這一目標。
用普通類如何實現枚舉功能,定義一個Weekday的類來模擬枚舉功能?
?????????? ?私有的構造方法??
?????????? ?每個元素分別用一個公有的靜態成員變量表示?
?????????? ?可以有若干公有方法或抽象方法。
????????? ? 采用抽象方法定義nextDay就將大量的if.else語句轉移成了一個個獨立的類。
package cn.itheima.day1;public abstract class WeekDay1 {private WeekDay1(){};public static final WeekDay1 MON = new WeekDay1(){public WeekDay1 nextDay(){return SUN;}};public static final WeekDay1 SUN = new WeekDay1(){public WeekDay1 nextDay(){return MON;}};public abstract WeekDay1 nextDay();/*public WeekDay nextDay(){if(this==SUN)return MON;elsereturn SUN;}*/public String toString(){return this==SUN?"SUN":"MON";} }
代碼測試: package com.itheima.day01; public class WeekDayTest { public static void main(String[] args) { WeekDay Mon = WeekDay.MON; System.out.println(Mon); } }
public enum WeekDay{SUN,MON,TUE,WED,THU,FRI,SAT;//; 可加可不加上private WeekDay(){System.out.println("first");};private WeekDay(int day){System.out.println("second");}}
枚舉應用交通燈,trafficLamp 私有的構造函數 私有的成員變量 和public方法
public enum TrafficLamp{RED(50){public TrafficLamp TrafficLampnexLamp(){return GREEN;}},GREEN(30){public TrafficLamp TrafficLampnexLamp(){return YELLOW;}},YELLOW(5){public TrafficLamp TrafficLampnexLamp(){return RED;}};public abstract TrafficLamp TrafficLampnexLamp();private int time;private TrafficLamp(int time){this.time = time;}}}
枚舉類總結:
1、枚舉類是一種特殊形式的Java類。 枚舉元素也是類對象
2、枚舉類中聲明的每一個枚舉值代表枚舉類的一個實例對象。
3、枚舉類與Java中的普通類一樣,在聲明枚舉類時,也可以聲明屬性、方法和構造函數。但枚舉類的構造函數 ????? 必須為私有的(這點不難理解)。
4、枚舉類也可以實現接口、或繼承抽象類。
5、JDK 1.5 中擴展了switch語句,它除了可以接收int, byte, char, short,String外,還可以接收一個枚舉類型。
6、若枚舉類只有一個枚舉值,則可以當作單例設計模式使用。
7、枚舉類的實例變量是把所以的枚舉實例都加載一次的。如果調用了某個枚舉類,那么該枚舉類先把枚舉類 里面的所有元素都先加載一次。
轉載于:https://www.cnblogs.com/thankyou/p/4352151.html
總結
以上是生活随笔為你收集整理的Java高新技术 枚举的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试题(转的)
- 下一篇: java美元兑换,(Java实现) 美元