程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 列舉Jave枚舉的幾種操作方法

列舉Jave枚舉的幾種操作方法

編輯:關於JAVA

Jdk 1.5後來了個哥們叫 enum 平時也用著,但也未做個總結啥地,今兒個同事問我如何用,就整理了下。

枚舉其實就是一種類型,跟int, char 這種差不多,就是定義變量時限制輸入的,你只能夠賦enum裡面規定的值。

定義枚舉 方法很簡單,就跟定義一個類一樣,只是把class換成 enum,其他的,你懂地。e.g:

定義一個簡單的枚舉代碼

  1. public enum WorkDay{
  2. Monday,Tuesday,Wednesday,Thurday,Friday;//定義時,枚舉值間有逗號隔開,最後用分號結束
  3. }

廢話不多說,直接上main 方法,拿去玩玩吧:

Java代碼

  1. public static void main(String []args)
  2. {
  3. /**
  4. * 枚舉類型是一種類型,既然是類型,就是跟int,char他們 一樣的,
  5. * 拿來定義變量,限制你對變量的賦值,就像 int a,你不能夠給a一個 string的值
  6. * 同理,一個枚舉用來定義一個變量時,你只能夠賦枚舉值,其方式為
  7. * "枚舉名.值"
  8. */
  9. WorkDay myworkday=WorkDay.Wednesday;
  10. /** 補充點switch的基礎知識,switch語句括號中支持byte \short \char \int類型,
  11. * jdk 1.5以後支持枚舉,所以,這裡可以直接使用枚舉變量myworkday。
  12. * 呵呵,在jdk1.7後將switch將支持string
  13. */
  14. switch (myworkday)
  15. {
  16. /*枚舉重寫了toString()方法,所以枚舉變量的值不帶前綴
  17. * myworkday 裡面的值應該是枚舉括號裡面的那幾個
  18. */
  19. case Monday:
  20. System.out.println("you work day is Monday !");
  21. break;
  22. case Tuesday:
  23. System.out.println("you work day is Tuesday!");
  24. break;
  25. case Wednesday:
  26. System.out.println("you work day is Wednesday !");
  27. break;
  28. case Thurday:
  29. System.out.println("you work day is Thurday !");
  30. break;
  31. case Friday:
  32. System.out.println("you work day is Friday !");
  33. break;
  34. }
  35. System.out.println("--------遍歷所有值----------");
  36. //----使用values()方法返回一個數組
  37. for(WorkDay day:WorkDay.values())
  38. {
  39. System.out.println(day);
  40. }
  41. //-----既然是數組,就可以統計大小
  42. System.out.println("WorkDay 裡面有 "+WorkDay.values().length+" 個元素");
  43. //--------------------調用 ordinal()方法,返回枚舉值在枚舉中的索引,數組索引嘛,當然從0開始
  44. System.out.println(WorkDay.Monday.ordinal());
  45. System.out.println(WorkDay.Friday.ordinal());
  46. //---默認實現Java.lang.Comparable接口 ,測試測試
  47. System.out.println(WorkDay.Monday.compareTo(WorkDay.Thurday));//結果應該是 -3
  48. //---Monday的索引為0,Thurday為 3,0-3=-3,
  49. System.out.println(WorkDay.Friday.compareTo(WorkDay.Tuesday));//同理,結果應該為4-1=3,
  50. }

簡單吧,來點狠的,前面說了,枚舉有點像類,只是把class換成了enum,那麼它跟一般的類一樣可以添加屬性或方法。

帶方法與屬性的enum代碼

  1. public enum WeAreJavaer{
  2. chinese,Java, spring, DB2, AIX; // 枚舉列表,必須寫在最前面,否則編譯出錯
  3. private final static String location = "Javaeye"; //定義一個屬性
  4. public static WeAreJavaer getInfomation() {
  5. WeAreJavaer flag=null;
  6. if (location.equals("Javaeye"))
  7. {
  8. flag=Java;
  9. }
  10. else
  11. {
  12. flag= chinese;
  13. }
  14. return flag;
  15. }
  16. }

老規矩,直接上main()方法測試:

寫道

  1. public static void main(String []ags)
  2. {
  3. System.out.println("---------------------測試調用枚舉中寫的方法-------------------------------");
  4. System.out.println("直接調用枚舉裡面的方法: "+ WeAreJavaer.getInfomation());
  5. }

3、來點更狠的。

你可以通過括號來給enum賦值,這樣的話,你必須有帶參的構造方法,還需要有一屬性與方法,否則編譯時會出錯。

另外,你如果給enum裡面的元素賦值的話,要麼都賦,要麼都不賦,不要東賦一個,西賦一個。

如果不賦值則不能寫構造方法,如果你賦值了,而沒有構造方法,編譯還是通不過,廢話不多少,來,看:

可賦值的enum代碼

  1. public enum People {
  2. xiaowang(20), xiaozhang(32),xiaoli(50), xiaogou(21);
  3. private final int age;
  4. People(int value) { //構造器只能是默認或者private, 從而保證構造函數只能在內部使用
  5. this.age = value;
  6. }
  7. public int getAge() {
  8. return age;
  9. }
  10. }

好吧,啥也不說了,接下來的事,你懂地:

測試帶值enum代碼

  1. public static void main(String[] args) {
  2. for(People people:People.values()){
  3. /*通過getValue()取得相關枚舉的值*/
  4. System.out.println(people+" 的年齡 :"+people.getAge());
  5. }
  6. }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved