Java: enum

來源:互聯網
上載者:User

Java Enum 學習

1.       關於Java Enum:

學過C/C++等語言的人,應該都對Enum類型略知一二。Enum一般用來表示一組相同類型的常量。如性別、日期、月份、顏色等。對這些屬性用常量的好處是顯而易見的,不僅可以保證單例,且比較時候可以用”==”來替換equals。是一種好的習慣。JDK1.5之前沒有Enum這個類型,那時候一般用介面常量來替代。有了JavaEnum之後,可以更貼近的表示這種常量。

2.       如何使用Java Enum

簡單的用法:JavaEnum簡單的用法一般用於代表一組常用常量,可用來代表一類相同類型的常量值。如:

 

性別:

public enum SexEnum {

  male, female;

}

顏色:

public enum Color {

  RED, BLUE,GREEN,BLACK;

}

 

枚舉對象裡面的值都必須是唯一的。

可以通過Enum類型名直接引用該常量,如SexEnum.male,Color.RED.

複雜用法:Java為枚舉類型提供了一些內建的方法,同事枚舉常量還可以有自己的方法。可以很方便的遍曆枚舉對象,看個下面的例子:

 

1.       代碼一 WeekDay.java:

 

view plain
  1.  /** 
  2.  * @author yubing.linyb 
  3.  * 2009.7.29 
  4.  * 定義一個枚舉類型,代表星期一到星期日的7個縮寫常量 
  5.  * 同時還定義了枚舉類型的屬性day,該屬性可以是final,也可是變數 
  6.  * 同時還定義了該枚舉類型的一個方法printDay 
  7.  */  
  8. public enum WeekDay {  
  9. Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri(  
  10.         "Friday"), Sat("Saturday"), Sun("Sunday");  
  11.   
  12. /**定義枚舉類型自己的屬性**/  
  13. private final String day;  
  14.    
  15. private WeekDay(String day) {  
  16.      this.day = day;  
  17. }  
  18.   
  19. /**定義枚舉類型自己的方法**/  
  20. public static void printDay(int i){  
  21.      switch(i){  
  22.      case 1: System.out.println(WeekDay.Mon); break;  
  23.      case 2: System.out.println(WeekDay.Tue);break;  
  24.      case 3: System.out.println(WeekDay.Wed);break;  
  25.      case 4: System.out.println(WeekDay.Thu);break;  
  26.      case 5: System.out.println(WeekDay.Fri);break;  
  27.      case 6: System.out.println(WeekDay.Sat);break;  
  28.      case 7: System.out.println(WeekDay.Sun);break;  
  29.      default:System.out.println("wrong number!");  
  30.      }  
  31. }  
  32.    
  33. public String getDay() {  
  34.      return day;  
  35. }  
  36. }  

 

2.       代碼二 WeekDayTest.java:

 

view plain
  1. /** 
  2.  * @author yubing.linyb 
  3.  * 2009.7.29 
  4.  * 測試枚舉類型WeekDay. 
  5.  */  
  6. public class WeekDayTest {  
  7.   public static void main(String args[]) {  
  8.       for (WeekDay day : WeekDay.values()) {  
  9.          System.out.println(day + "====>" + day.getDay());  
  10.       }  
  11.       WeekDay.printDay(5);  
  12.   }  
  13. }  

 

輸出結果為:

          Mon====>Monday

Tue====>Tuesday

Wed====>Wednesday

Thu====>Thursday

Fri====>Friday

Sat====>Saturday

Sun====>Sunday

Fri

3.       Java Enum原理

Java Enum類型的文法結構儘管和java類的文法不一樣,應該說差別比較大。但是經過編譯器編譯之後產生的是一個class檔案。該class檔案經過反編譯可以看到實際上是產生了一個類,該類繼承了java.lang.Enum<E>.

WeekDay(javap WeekDay命令之後得到的內容如下(去掉了彙編代碼):

view plain
  1. public final class WeekDay extends java.lang.Enum{  
  2.     public static final WeekDay Mon;  
  3.     public static final WeekDay Tue;  
  4.     public static final WeekDay Wed;  
  5.     public static final WeekDay Thu;  
  6.     public static final WeekDay Fri;  
  7.     public static final WeekDay Sat;  
  8.     public static final WeekDay Sun;  
  9.     static {};  
  10.     public static void printDay(int);  
  11.     public java.lang.String getDay();  
  12.     public static WeekDay[] values();  
  13.     public static WeekDay valueOf(java.lang.String);  
  14. }  

 

所以實際上Enum類型就是以Java類來實現的,沒有什麼新的特點,只不過java編譯器幫我們做了文法的解析和編譯。完全也可以自己實現。但是既然有這樣方便一個東西,當然會去用了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.