1. 程式人生 > >enum列舉型別

enum列舉型別

1定義和說明

1. 列舉型別定義的一般形式為: enum 列舉名{列舉值表 }; 在列舉值表中應羅列出所有可用值。這些值也稱為列舉元素。 例如: 該列舉名為weekday,列舉值共有7個,即一週中的七天。凡被說明為weekday型別變數的取值只能是七天中的某一天。 2. 列舉變數的說明 如同結構和聯合一樣,列舉變數也可用不同的方式說明,即先定義後說明,同時定義說明或直接說明。 設有變數a,b,c被說明為上述的weekday,可採用下述任一種方式: enum weekday{ sun,mon,tue,wed,thu,fri,sat }; enum weekday a,b,c; 或者為: enum weekday{ sun,mon,tue,wed,thu,fri,sat }a,b,c; 或者為: enum { sun,mon,tue,wed,thu,fri,sat }a,b,c;

2
記憶體空間

enum是列舉型   union是共用體,成員共用一個變數緩衝區

3賦值和使用

列舉型別在使用中有以下規定: 1.列舉值常量,不是變數。不能在程式中用賦值語句再對它賦值。 2. 列舉元素本身由系統定義了一個表示序號的數值,從0開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1,…,sat值為6。 只能把列舉值賦予列舉變數,不能把元素的數值直接賦予列舉變數。。如一定要把數值賦予列舉變數,則必須用強制型別轉換。 如: a=(enum weekday)2; 特別注意:在VS2010等編譯器中,強制轉換格式應為:(weekday)2,如果前面加上了enum,編譯時會出現“型別重定義”的錯誤。 其意義是將順序號為2的列舉元素賦予列舉
變數
a,相當於: a=tue; 還應該說明的是列舉元素不是字元常量也不是字串常量,使用時不要加單、雙引號。
輸出結果:
  1 monday        2 tuesday       3 wendsday      4 thursday      5 friday
 6 saturday      7 sunday        8 monday        9 tuesday      10 wendsday
11 thursday     12 friday       13 saturday     14 sunday       15 monday
16 tuesday      17 wendsday     18 thursday     19 friday       20 saturday
21 sunday       22 monday       23 tuesday      24 wendsday     25 thursday
26 friday       27 saturday     28 sunday       29 monday       30 tuesday

3. 如果列舉值與一些關鍵字衝突,例如: enum course{begin, then, end}; 由於程式有可能使用了iostream,並且使用了名稱空間std,這時如果直接使用end進行賦值就有可能出現“不明確”符號的錯誤。解決此問題,有兩個方法: (1)定義列舉值時應避免使用常用關鍵字,可以加字首進行區分 例如:enum course{e_begin, e_then, e_end}; (2)可以列舉值前面加入列舉型別:course::end

4Enum的用法

Enum定義

Enum是enumeration(列舉)的簡寫形式,包含在java.lang包中.熟悉C, C++, C#, 或 Pascal人應該對列舉有所瞭解,先看個例子: public enum Season { winter, spring, summer, fall }

介面方法實現列舉

一個enum是定義一組值的物件,它可以包括零個或多個值成員.它是屬於enum型別的,一個enum物件中不可有兩個或多個相同的屬性或值.在次之前的java程式設計師一般是 用介面的方法實現列舉的,如 : public interface Season { static winter = 0; static spring = 1; //etc.. }

Enum例項

引入了enum的java的列舉的編寫方便了許多,只須定義一個enum型的物件.enum物件的值都回自動獲得一個數字值,從0開始,依次遞增.看一個比較簡單的enum實現的例子: EnumDemo.java package net.javagarage.enums; /* We can loop over the values we put into the enum using the values() method. Note that the enum Seasons is compiled into a separate unit, called EnumDemo$Seasons.class */ public class EnumDemo { /*declare the enum and add values to it. note that, like in C#, we don't use a ; to end this statement and we use commas to separate the values */ private enum Seasons { winter, spring, summer, fall } //list the values public static void main(String[] args) { for (Seasons s : Seasons.values()){ System.out.println(s); } } } 執行上述程式碼你回得到 以下結果: winter spring summer fall

Enum的屬性呼叫:

下面的程式碼展示了呼叫enum物件的方法,這也是它通常的用法: package net.javagarage.enums; /* File: EnumSwitch.java Purpose: show how to switch against the values in an enum. */ public class EnumSwitch { private enum Color { red, blue, green } //list the values public static void main(String[] args) { //refer to the qualified value doIt(Color.red); } /*note that you switch against the UNQUALIFIED name. that is, "case Color.red:" is a compiler error */ private static void doIt(Color c){ switch (c) { case red: System.out.println("value is " + Color.red); break; case green: System.out.println("value is " + Color.green); break; case blue: System.out.println("value is : " + Color.blue); break; default : System.out.println("default"); } } } 為Enums新增屬性和方法 enums也可以象一般的類一樣新增方法和屬性,你可以為它新增靜態和非靜態的屬性或方法,這一切都象你在一般的類中做的那樣. 就是這麼的簡單.但是有一點是需要注意的,那就是enums的值列表必須緊跟在enum宣告,不然編譯時將會出錯. Enums建構函式: 和類一樣enums也可以有自己的建構函式 儘管enums有這麼多的屬性,但並不是用的越多越好,如果那樣還不如直接用類來的直接.enums的優勢在定義int最終變數僅當這些值有一定特殊含義時.但是如果你需要的是一個類,就定義一個類,而不是enum