程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java enum的用法,javaenum用法

java enum的用法,javaenum用法

編輯:JAVA綜合教程

java enum的用法,javaenum用法


原始的常量定義:

  

1 public static fianl MON=“Mon”;
2 public static final TUE="Tue";

語法(定義)

    創建枚舉類型要使用 enum 關鍵字,隱含了所創建的類型都是 java.lang.Enum 類的子類(java.lang.Enum 是一個抽象類)。枚舉類型符合通用模式Class Enum<E extends Enum<E>>,而 E 表示枚舉類型的名稱。枚舉類型的每一個值都將映射到 protected Enum(String name, int ordinal) 構造函數中,在這裡,每個值的名稱都被轉換成一個字符串,並且序數設置表示了此設置被創建的順序。

1 public enum EnumTest {
2     MON, TUE, WED, THU, FRI, SAT, SUN;
3 }

這段代碼實際上調用了7次 Enum(String name, int ordinal):

new Enum<EnumTest("MON",0);
new Enum<EnumTest("TUE",1);
new Enum<EnumTest("WED",2);
......

遍歷、switch 等常用操作

  對enum進行遍歷和switch的操作示例代碼:

 1 public class Test {
 2     public static void main(String[] args) {
 3         for (EnumTest e : EnumTest.values()) {
 4             System.out.println(e.toString());
 5         }
 6          
 7         System.out.println("----------------我是分隔線------------------");
 8          
 9         EnumTest test = EnumTest.THU;
10         switch (test) {
11         case MON:
12             System.out.println("今天是星期一");
13             break;
14         case TUE:
15             System.out.println("今天是星期二");
16             break;
17         // ... ...
18         default:
19             System.out.println(test);
20             break;
21         }
22     }
23 }
輸出結果:
    MON     TUE     WED     ...     ------------我是分割線--------------     今天是星期四    

 

enum 自定義屬性和方法

 1  public enum EnumTest{
 2  2         MON("星期一", 1), TUE("星期二", 2), WED("星期三", 3), THU("星期四", 4);
 3  3         // 成員變量
 4  4         private String name;
 5  5         private int index;
 6  6 
 7  7         // 構造方法
 8  8         private EnumTest(String name, int index) {
 9  9             this.name = name;
10 10             this.index = index;
11 11         }
12             // 覆蓋方法
13            @Override
14             public String toString() {
15                 return this.index + "_" + this.name;
16             }
17 12       
18 13         // 普通方法
19 14         public static String getName(int index) {
20 15             for (EnumTest e : EnumTest.values()) {
21 16                 if (e.getIndex() == index) {
22 17                     return e.name;
23 18                 }
24 19             }
25 20             return null;
26 21         }
27 22 
28 23         // get set 方法
29 24         public String getName() {
30 25             return name;
31 26         }
32 27 
33 28         public void setName(String name) {
34 29             this.name = name;
35 30         }
36 31 
37 32         public int getIndex() {
38 33             return index;
39 34         }
40 35 
41 36         public void setIndex(int index) {
42 37             this.index = index;
43 38         }
44 39     }    

 1 public class Test {
 2     public static void main(String[] args) {
 3         // EnumSet的使用
 4         EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);
 5         for (EnumTest day : weekSet) {
 6             System.out.println(day);
 7         }
 8  
 9         // EnumMap的使用
10         EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class);
11         weekMap.put(EnumTest.MON, "星期一");
12         weekMap.put(EnumTest.TUE, "星期二");
13         // ... ...
14         for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
15             Entry<EnumTest, String> entry = iter.next();
16             System.out.println(entry.getKey().name() + ":" + entry.getValue());
17         }
18     }
19 }

原理分析

        enum 的語法結構盡管和 class 的語法不一樣,但是經過編譯器編譯之後產生的是一個class文件。該class文件經過反編譯可以看到實際上是生成了一個類,該類繼承了java.lang.Enum<E>。實際上 enum 就是一個 class,只不過 java 編譯器幫我們做了語法的解析和編譯而已。

總結

    可以把 enum 看成是一個普通的 class,它們都可以定義一些屬性和方法,不同之處是:enum 不能使用 extends 關鍵字繼承其他類,因為 enum 已經繼承了 java.lang.Enum(java是單一繼承)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved