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
- /**
- * @author yubing.linyb
- * 2009.7.29
- * 定義一個枚舉類型,代表星期一到星期日的7個縮寫常量
- * 同時還定義了枚舉類型的屬性day,該屬性可以是final,也可是變數
- * 同時還定義了該枚舉類型的一個方法printDay
- */
- public enum WeekDay {
- Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri(
- "Friday"), Sat("Saturday"), Sun("Sunday");
-
- /**定義枚舉類型自己的屬性**/
- private final String day;
-
- private WeekDay(String day) {
- this.day = day;
- }
-
- /**定義枚舉類型自己的方法**/
- public static void printDay(int i){
- switch(i){
- case 1: System.out.println(WeekDay.Mon); break;
- case 2: System.out.println(WeekDay.Tue);break;
- case 3: System.out.println(WeekDay.Wed);break;
- case 4: System.out.println(WeekDay.Thu);break;
- case 5: System.out.println(WeekDay.Fri);break;
- case 6: System.out.println(WeekDay.Sat);break;
- case 7: System.out.println(WeekDay.Sun);break;
- default:System.out.println("wrong number!");
- }
- }
-
- public String getDay() {
- return day;
- }
- }
2. 代碼二 WeekDayTest.java:
view plain
- /**
- * @author yubing.linyb
- * 2009.7.29
- * 測試枚舉類型WeekDay.
- */
- public class WeekDayTest {
- public static void main(String args[]) {
- for (WeekDay day : WeekDay.values()) {
- System.out.println(day + "====>" + day.getDay());
- }
- WeekDay.printDay(5);
- }
- }
輸出結果為:
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
- public final class WeekDay extends java.lang.Enum{
- public static final WeekDay Mon;
- public static final WeekDay Tue;
- public static final WeekDay Wed;
- public static final WeekDay Thu;
- public static final WeekDay Fri;
- public static final WeekDay Sat;
- public static final WeekDay Sun;
- static {};
- public static void printDay(int);
- public java.lang.String getDay();
- public static WeekDay[] values();
- public static WeekDay valueOf(java.lang.String);
- }
所以實際上Enum類型就是以Java類來實現的,沒有什麼新的特點,只不過java編譯器幫我們做了文法的解析和編譯。完全也可以自己實現。但是既然有這樣方便一個東西,當然會去用了。