標籤:static equals div put 分享圖片 bsp reg input val
有時候,變數的取值只在一個有限的集合內。
例如:pizza的大小隻有小、中、大和超大這四種尺寸。當然,可以將這些尺寸分別編碼為1、2、3、4或者S、M、L、X。但這樣存在著一定的隱患。在變數中很有可能儲存的是一個錯誤的值(如0和m)。
針對這種情況,可以自訂枚舉類型。枚舉類型包括有限個命名的值。例如,
enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};
現在,可以聲明這種類型的變數:
Size s = Size.MEDIUM;
Size類型的變數只能儲存到這個型別宣告中給定的某個枚舉值,或者null值,null表示這個變數沒有設定任何值。
下面是他的完整代碼加運行結果:
package enums;import java.util.Scanner;/** * 詳解請看:Java核心技術(原書第十版)p188-189 * @author 大淩軒 * */public class EnumTest {public static void main(String[] args) {Scanner in=new Scanner(System.in);System.out.print("Enter a size:(SMALL,MEDIUM,LARGE,EXTRA_LARGE)");String input=in.next().toUpperCase(); //這裡解釋下此處toUpperCase方法,就是將你鍵盤輸入的字母格式化為大寫,下面有運行圖Size size=Enum.valueOf(Size.class, input);System.out.println("size="+size);System.out.println("abbreviation="+size.getAbbreviation());if(size==Size.EXTRA_LARGE)System.out.println("Good job--you paid attention to the _.");}}enum Size{SMALL("S"),MEDIUM("M"),LAREG("L"),EXTRA_LARGE("XL");private Size(String abbreviation){this.abbreviation=abbreviation;}public String getAbbreviation(){return abbreviation;}private String abbreviation;}
下面為了自己以後方便理解,對其進行詳細解釋:
public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};
實際上,這個聲明定義的類型是一個類,它剛好有四個執行個體,在此盡量不要構造新對象。
因此,在比較兩個枚舉類型的值時,永遠不要調用equals,而直接使用“= =”就可以了。
如果需要的話,可以在枚舉類型中添加一些構造器、方法和域。當然,構造器只是在構造枚舉常量的時候被調用。小面是一個樣本:
public enum Size{SMALL("S"),MEDIUM("M"),LARGE("L"),EXTRA_LARGE("XL");private String abbreviation;private Size(String abbreviation){this.abbreviation=abbreviation;}public String getAbbreviation(){return abbreviation;}}
所有的枚舉類型都是Enum類的子類。它們繼承了這個類的許多方法。其中最有用的一個是toString,這個方法能夠返回枚舉常量名。例如,Size.SMALL.toString()將返回字串“SMALL”。
toString的逆方法是靜態方法valueOf。例如,語句:
Size s = Enum.valueOf(Size.class,"SMALL");
將s設定成Size.SMALL。
每個枚舉類型都有一個靜態values方法,它將返回一個包含全部枚舉值的數組。例如,如下調用
Size[] values = Size.values();
返回包含元素Size.SMALL,Size.MEDIUM,Size.LARGE,Size.EXTRA_LARGE的數組。
ordinal方法返回enum聲明中枚舉常量的位置,位置從0開始計數。例如:Size.MEDIUM.ordinal()返回1。
代碼其實是最能體現出知識內容的載體,上面的解釋其實起不到太大的作用,你讀懂了代碼,也就知道個八九不離十了。
以上是我看《Core Java Volume I-Fundamentals》第十版的筆記
關於枚舉的實現細節和原理也可參考《ThinkingInJava》第四版:http://blog.lichengwu.cn/java/2011/09/26/the-usage-of-enum-in-java/
Java之枚舉類