列舉Jave枚舉的幾種操作方法
Jdk 1.5后來(lái)了個(gè)哥們叫 enum 平時(shí)也用著,但也未做個(gè)總結(jié)啥地,今兒個(gè)同事問(wèn)我如何用,就整理了下。
枚舉其實(shí)就是一種類型,跟int, char 這種差不多,就是定義變量時(shí)限制輸入的,你只能夠賦enum里面規(guī)定的值。
定義枚舉 方法很簡(jiǎn)單,就跟定義一個(gè)類一樣,只是把class換成 enum,其他的,你懂地。e.g:
定義一個(gè)簡(jiǎn)單的枚舉代碼
- public enum WorkDay{
- Monday,Tuesday,Wednesday,Thurday,Friday;//定義時(shí),枚舉值間有逗號(hào)隔開(kāi),***用分號(hào)結(jié)束
- }
廢話不多說(shuō),直接上main 方法,拿去玩玩吧:
Java代碼
- public static void main(String []args)
- {
- /**
- * 枚舉類型是一種類型,既然是類型,就是跟int,char他們 一樣的,
- * 拿來(lái)定義變量,限制你對(duì)變量的賦值,就像 int a,你不能夠給a一個(gè) string的值
- * 同理,一個(gè)枚舉用來(lái)定義一個(gè)變量時(shí),你只能夠賦枚舉值,其方式為
- * "枚舉名.值"
- */
- WorkDay myworkday=WorkDay.Wednesday;
- /** 補(bǔ)充點(diǎn)switch的基礎(chǔ)知識(shí),switch語(yǔ)句括號(hào)中支持byte \short \char \int類型,
- * jdk 1.5以后支持枚舉,所以,這里可以直接使用枚舉變量myworkday。
- * 呵呵,在jdk1.7后將switch將支持string
- */
- switch (myworkday)
- {
- /*枚舉重寫(xiě)了toString()方法,所以枚舉變量的值不帶前綴
- * myworkday 里面的值應(yīng)該是枚舉括號(hào)里面的那幾個(gè)
- */
- case Monday:
- System.out.println("you work day is Monday !");
- break;
- case Tuesday:
- System.out.println("you work day is Tuesday!");
- break;
- case Wednesday:
- System.out.println("you work day is Wednesday !");
- break;
- case Thurday:
- System.out.println("you work day is Thurday !");
- break;
- case Friday:
- System.out.println("you work day is Friday !");
- break;
- }
- System.out.println("--------遍歷所有值----------");
- //----使用values()方法返回一個(gè)數(shù)組
- for(WorkDay day:WorkDay.values())
- {
- System.out.println(day);
- }
- //-----既然是數(shù)組,就可以統(tǒng)計(jì)大小
- System.out.println("WorkDay 里面有 "+WorkDay.values().length+" 個(gè)元素");
- //--------------------調(diào)用 ordinal()方法,返回枚舉值在枚舉中的索引,數(shù)組索引嘛,當(dāng)然從0開(kāi)始
- System.out.println(WorkDay.Monday.ordinal());
- System.out.println(WorkDay.Friday.ordinal());
- //---默認(rèn)實(shí)現(xiàn)java.lang.Comparable接口 ,測(cè)試測(cè)試
- System.out.println(WorkDay.Monday.compareTo(WorkDay.Thurday));//結(jié)果應(yīng)該是 -3
- //---Monday的索引為0,Thurday為 3,0-3=-3,
- System.out.println(WorkDay.Friday.compareTo(WorkDay.Tuesday));//同理,結(jié)果應(yīng)該為4-1=3,
- }
簡(jiǎn)單吧,來(lái)點(diǎn)狠的,前面說(shuō)了,枚舉有點(diǎn)像類,只是把class換成了enum,那么它跟一般的類一樣可以添加屬性或方法。
帶方法與屬性的enum代碼
- public enum WeAreJavaer{
- chinese,java, spring, DB2, AIX; // 枚舉列表,必須寫(xiě)在最前面,否則編譯出錯(cuò)
- private final static String location = "javaeye"; //定義一個(gè)屬性
- public static WeAreJavaer getInfomation() {
- WeAreJavaer flag=null;
- if (location.equals("javaeye"))
- {
- flag=java;
- }
- else
- {
- flag= chinese;
- }
- return flag;
- }
- }
老規(guī)矩,直接上main()方法測(cè)試:
寫(xiě)道
- public static void main(String []ags)
- {
- System.out.println("---------------------測(cè)試調(diào)用枚舉中寫(xiě)的方法-------------------------------");
- System.out.println("直接調(diào)用枚舉里面的方法: "+ WeAreJavaer.getInfomation());
- }
3、來(lái)點(diǎn)更狠的。
你可以通過(guò)括號(hào)來(lái)給enum賦值,這樣的話,你必須有帶參的構(gòu)造方法,還需要有一屬性與方法,否則編譯時(shí)會(huì)出錯(cuò)。
另外,你如果給enum里面的元素賦值的話,要么都賦,要么都不賦,不要東賦一個(gè),西賦一個(gè)。
如果不賦值則不能寫(xiě)構(gòu)造方法,如果你賦值了,而沒(méi)有構(gòu)造方法,編譯還是通不過(guò),廢話不多少,來(lái),看:
可賦值的enum代碼
- public enum People {
- xiaowang(20), xiaozhang(32),xiaoli(50), xiaogou(21);
- private final int age;
- People(int value) { //構(gòu)造器只能是默認(rèn)或者private, 從而保證構(gòu)造函數(shù)只能在內(nèi)部使用
- this.age = value;
- }
- public int getAge() {
- return age;
- }
- }
好吧,啥也不說(shuō)了,接下來(lái)的事,你懂地:
測(cè)試帶值enum代碼
- public static void main(String[] args) {
- for(People people:People.values()){
- /*通過(guò)getValue()取得相關(guān)枚舉的值*/
- System.out.println(people+" 的年齡 :"+people.getAge());
- }
- }
【編輯推薦】
總結(jié)C#枚舉在開(kāi)發(fā)項(xiàng)目中的應(yīng)用