Java之枚舉類

來源:互聯網
上載者:User

標籤: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之枚舉類

聯繫我們

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