另外要強調 的兩點: 一是這些枚舉類型的構造函數都是私有的.它是不能被其它的類或者其它的枚舉 類型調用的. 而且這個私有修飾符是由編譯器自動加的,如果我們定義這些構造函數時,在 前面加上public 修飾符, 就會導致編譯錯誤, 如下圖5所示. 二是變量定義必須在枚舉類 型值定義之後. 上圖中double temperature 必須在枚舉類型值定義完了(分號表示枚舉類 型值定義完了, 如 Low(5.2);) 才能聲明.
圖4. 枚舉類型的構造函數是私有的
在J2SE 5.0以前,當我們實現一個枚舉類時,一般都是把一個整數關聯到此枚舉類的 某一個值的名字,出現的問題是同一個整數可以代表不同枚舉類的值. 下面的例子裡定義 兩個枚舉類 Course and Grade 如下:
清單4.
public class Course {
public static final int EnglishLit = 1;
public static final int Calculus = 2;
public static final int MusicTheory = 3;
public static final int MusicPerformance = 4;
}
public class Grade {
public static final int A = 1;
public static final int B = 2;
public static final int C = 3;
public static final int D = 4;
public static final int F = 5;
public static final int INCOMPLETE = 6;
}
如果開發者誤把student1.assignGrade(Grade.A)寫成student1.assignGrade (Course.EnglishList); 在編譯 階段是不能發現問題的,如果用J2SE 5.0 枚舉類型 (enum)可以避免這些問題.
枚舉類型每一個值都是public, static and final的.也就是說,這些值是唯一的而且 一旦定義了是不能被重寫或修改.而且盡管在枚舉類型每一個值聲明時沒有出現static關 鍵字, 實際上值都是靜態的, 而且我們不能在值前面加上static, public,final 修飾 符,否則就會出現下圖 6的錯誤.
圖5 枚舉類型值的錯誤聲明
枚舉類型都實現了Java.lang.Comparable,枚舉類型的值是可以比較排序的, 排列順序就是枚舉類型定義這些值的順序.