enum編程執行個體 隨機訪問

來源:互聯網
上載者:User

java枚舉(enum)學習<br />來自:www.java1995.org 作者: 爪娃<br />2009-06-06 瀏覽(138) 評論(0) 發表評論<br />摘要: Java中的枚舉是在JDK1.5才引進的,使用enum為關鍵字,是一種新的類型,允許用常量來表示資料片斷。所有的枚舉類型都是java.lang.Enum類的子類,枚舉內的常量用‘,’分隔開,若後面還有語句,則最後一個常量後面要用‘;’,枚舉...<br />Java中的枚舉是在JDK1.5才引進的,使用enum為關鍵字,是一種新的類型,允許用常量來表示資料片斷。所有的枚舉類型都是java.lang.Enum類的子類,枚舉內的常量用‘,’分隔開,若後面還有語句,則最後一個常量後面要用‘;’,枚舉中的常量預設都是public static final,這就是為什麼枚舉中的常量建議全大寫的原因,雖然它預設是public static final,但你在聲明常量時卻不能顯式使用public static final,否則編譯器反而會報錯誤。枚舉常量實際就是格舉類型的執行個體,它的初始化是依靠java.lang.Enum類的構造方法來的,見下:</p><p>Java代碼<br />1.// java.lang.Enum中定義的建構函式,<br />2.// 兩個參數分別是定義的枚舉常量名稱以及它所在的次序。<br />3.protected Enum(String name, int ordinal) {<br />4.<br />5. this.name = name;<br />6.<br />7. this.ordinal = ordinal;<br />8.<br />9.} </p><p>第一個枚舉常量的值預設是0,其它的依次加1.<br />下面先看下簡單的枚舉類的定義:<br />Java代碼<br />1.public enum Colors{<br />2. RED,BLUE,GREEN,YELLOW,GRAY;<br />3. //GRAY後面若沒有其它的語句,則其後面的分號可不寫,若後面有語句則必須添加<br />4.} </p><p>下面看個簡單的應用:</p><p>Java代碼<br />1.package com.iwtxokhtd.enums;<br />2.<br />3./**<br />4. * @author Administrator<br />5. *<br />6. */<br />7.public enum Colors {<br />8.<br />9. /**<br />10. * 定義一個顏色枚舉類<br />11. */<br />12. RED,<br />13. GREEN,<br />14. BLUE,<br />15. YELLOW,<br />16. GRAY;<br />17.}<br />18./**<br />19. * 測試枚舉類型<br />20. */<br />21.package com.iwtxokhtd.enums;<br />22.<br />23./**<br />24. * @author Administrator<br />25. *<br />26. */<br />27.public class EnumTest {<br />28.<br />29. public static void printColor(Colors color){<br />30. //用switch,在jdk1.5以後其參數支援enum,而不僅僅是int,short,char,byte<br />31. switch(color){<br />32. case RED:<br />33. System.out.println("這是紅色");<br />34. break;<br />35. case GREEN:<br />36. System.out.println("這是綠色");<br />37. break;<br />38. case BLUE:<br />39. System.out.println("這是藍色");<br />40. break;<br />41. case YELLOW:<br />42. System.out.println("這是黃色");<br />43. break;<br />44. case GRAY:<br />45. System.out.println("這是灰色");<br />46. break;<br />47. default:<br />48. System.out.println("其它色");<br />49. }<br />50. }<br />51. public static void main(String []args){<br />52. //列印藍色<br />53. printColor(Colors.BLUE);<br />54. }<br />55.} </p><p>使用EnumMap<br />EnumMap是為枚舉類型定做的Map實現,它比其它的Map實現能更高效地完成枚舉類型執行個體到值的映射,EnumMap內部使用枚舉類型的ordinal()方法得到當前執行個體的聲明次序。<br />見樣本:</p><p>Java代碼<br />1./**<br />2. * EnumMap測試<br />3. */<br />4.package com.iwtxokhtd.enums;<br />5.<br />6.import java.util.EnumMap;<br />7.<br />8./**<br />9. * @author Administrator<br />10. *<br />11. */<br />12.public class EnumMapTest {<br />13.<br />14. private EnumMap<Colors,String> colors=new EnumMap<Colors,String>(Colors.class);<br />15. public EnumMapTest(){<br />16. colors.put(Colors.RED, "紅色");<br />17. colors.put(Colors.BLUE, "藍色");<br />18. colors.put(Colors.GRAY, "灰色");<br />19. colors.put(Colors.GREEN, "綠色");<br />20. colors.put(Colors.YELLOW, "黃色");<br />21. }<br />22. //取得顏色<br />23. public String getColor(Colors color){<br />24. return colors.get(color);<br />25. }<br />26. public static void main(String []args){<br />27. System.out.println(new EnumMapTest().getColor(Colors.BLUE));<br />28. }<br />29.<br />30.} </p><p>枚舉其實是個類,下面來看看枚舉作為一個類的使用:</p><p>下面我們將以前的那些類定義放到一個類中,見代碼:</p><p>Java代碼<br />1./**<br />2. * 枚舉改造<br />3. */<br />4.package com.iwtxokhtd.enums;<br />5.<br />6.import java.util.EnumSet;<br />7.<br />8./**<br />9. * @author Administrator<br />10. *<br />11. */<br />12.enum AnotherColors{<br />13. RED,GREEN,BLUE,YELLOW,GRAY;<br />14. public String printColor(){<br />15. switch(this){<br />16. case RED:<br />17. return "這是紅色";<br />18. case GREEN:<br />19. return "這是綠色";<br />20. case BLUE:<br />21. return "這是藍色";<br />22. case YELLOW:<br />23. return "這是黃色";<br />24. case GRAY:<br />25. return "這是灰色";<br />26. default:<br />27. return "其它色";<br />28. }<br />29. }<br />30.}<br />31.public class OneClassTest {<br />32.<br />33. public static void main(String []args){<br />34. //EnumSet.allOf()是指以AnotherColors的全部變數為Set的值,詳情見JDK文檔<br />35. for(AnotherColors color:EnumSet.allOf(AnotherColors.class)){<br />36. System.out.println("定義的顏色資訊是:"+color.printColor());<br />37.<br />38. }<br />39. }<br />40.} </p><p>枚舉類型也允許定義自己的構造方法如:</p><p>Java代碼<br />1./**<br />2. * 枚舉類型允許定義自己的構造方法<br />3. */<br />4.package com.iwtxokhtd.enums;<br />5.<br />6.import java.util.EnumSet;<br />7.<br />8./**<br />9. * @author Administrator<br />10. *<br />11. */<br />12.enum ConstructorEnum{<br />13. RED("red","紅色"),<br />14. GREEN("green","綠色"),<br />15. BLUE("blue","藍色"),<br />16. YELLOW("yellow","黃色"),<br />17. GRAY("gray","灰色");<br />18.<br />19. //枚舉類的欄位或屬性必須定義在枚舉常量的後面<br />20. private String color;<br />21. private String message;<br />22. //預設是private型<br />23. ConstructorEnum(String color,String message){<br />24.<br />25. this.color=color;<br />26. this.message=message;<br />27. }<br />28. public String getColor() {<br />29. return color;<br />30. }<br />31. public String getMessage() {<br />32. return message;<br />33. }<br />34.}<br />35.public class NewEnumTest {<br />36.<br />37. public static void main(String []args){<br />38. for(ConstructorEnum color:EnumSet.allOf(ConstructorEnum.class)){<br />39. System.out.println("色鍵為:"+color.getColor());<br />40. System.out.println("顏色值為:"+color.getMessage());<br />41. }<br />42. }<br />43.} </p><p>使用枚舉類型注意事項:<br />(1) 枚舉類型不能使用extends關鍵字,但是可以使用implements關鍵字。這樣我們可以把不同枚舉類型共有的行為提取到介面中,來規範枚舉類型的行為。<br />(2) 枚舉類型的自訂建構函式並不能覆蓋預設執行的建構函式,它會跟在預設建構函式之後執行。<br />(3) 枚舉類型的自訂建構函式必須是私人的,但你不能顯式加private,否則會出錯<br /> (4)枚舉類型中枚舉常量的定義必須放在最上面,其後才能是變數和方法的定義。</p><p>下面學下枚舉類的自訂方法,見代碼:</p><p>Java代碼<br />1./**<br />2. * 在枚舉類裡使用自訂方法<br />3. */<br />4.package com.iwtxokhtd.enums;<br />5.<br />6.import java.util.EnumSet;<br />7.<br />8./**<br />9. * @author Administrator<br />10. *<br />11. */<br />12.enum MethodEnum{<br />13. RED{<br />14. public void printColor(){<br />15. System.out.println("紅色");<br />16. }<br />17. },<br />18.<br />19. GREEN{<br />20. public void printColor(){<br />21. System.out.println("綠色");<br />22. }<br />23. },<br />24.<br />25. BLUE{<br />26. public void printColor(){<br />27. System.out.println("藍色");<br />28. }<br />29. },<br />30.<br />31. YELLOW{<br />32. public void printColor(){<br />33. System.out.println("黃色");<br />34. }<br />35. },<br />36.<br />37. GRAY{<br />38. public void printColor(){<br />39. System.out.println("灰色");<br />40. }<br />41. };<br />42. public abstract void printColor();<br />43.}<br />44.public class MethodEnumTest {<br />45.<br />46. //測試使用自訂的方法來列印枚舉類的常量值<br />47. public static void main(String []args){<br />48. for(MethodEnum color:EnumSet.allOf(MethodEnum.class)){<br />49. color.printColor();<br />50. }<br />51. }<br />52.} </p><p>下面來看下,如何通過相關的資料反過來尋找枚舉類中的項,解釋見下面的代碼:<br />Java代碼<br />1./**<br />2. * 通過相關的資料來尋找對應的枚舉項<br />3. */<br />4.package com.iwtxokhtd.enums;<br />5.<br />6.import java.util.EnumSet;<br />7.import java.util.HashMap;<br />8.import java.util.Map;<br />9.<br />10./**<br />11. * @author Administrator<br />12. *<br />13. */<br />14.enum SearchEnum{<br />15. RED(0),<br />16. GREEN(1),<br />17. BLUE(2),<br />18. YELLOW(3),<br />19. GRAY(4);<br />20. //使用靜態Map把相關的資料與枚舉項關聯起來<br />21. private static final Map<Integer,SearchEnum> search=new HashMap<Integer,SearchEnum>();<br />22. //把有的關聯項放到Map裡<br />23. static{<br />24. for(SearchEnum color:EnumSet.allOf(SearchEnum.class)){<br />25. search.put(color.getI(), color);<br />26. }<br />27. }<br />28. private int i;<br />29. SearchEnum(int i){<br />30. this.i=i;<br />31. }<br />32. public int getI(){<br />33. return i;<br />34. }<br />35. //尋找<br />36. public static SearchEnum get(int i){<br />37. return search.get(i);<br />38. }<br />39.}<br />40.public class SearchEnumTest {<br />41. //測試尋找<br />42. public static void main(String []args){<br />43. //尋找BLUE<br />44. System.out.println(SearchEnum.get(2));<br />45. }<br />46.} </p><p>枚舉的學習先到這裡,注意:枚舉在某些場合使用還是比較方便的,如:定義時間日期常量、顏色常量、身高離散常量、物品的尺寸等,但千萬不要濫用。</p><p>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.