ENUM(程式語言中的一種數據類型)

ENUM(程式語言中的一種數據類型)

本詞條是多義詞,共2個義項
更多義項 ▼ 收起列表 ▲

enum是計算機程式語言中的一種數據類型。枚舉類型:在實際問題中,有些變數的取值被限定在一個有限的範圍內。例如,一個星期內只有七天,一年只有十二個月,一個班每周有六門課程等等。如果把這些量說明為整型,字元型或其它類型顯然是不妥當的。為此,C語言提供了一種稱為“枚舉”的類型。在“枚舉”類型的定義中列舉出所有可能的取值,被說明為該“枚舉”類型的變數取值不能超過定義的範圍。應該說明的是,枚舉類型是一種基本數據類型,而不是一種構造類型,因為它不能再分解為任何基本類型。

基本介紹

  • 中文名:枚舉
  • 外文名:ENUM
  • 類屬:數據類型
  • 所屬學科:計算機
  • 套用領域:計算機編程
定義說明,記憶體空間,賦值和使用,用法,

定義說明

1. 枚舉類型定義的一般形式為:
enum 枚舉名{ 枚舉值表 };
在枚舉值表中應羅列出所有可用值。這些值也稱為枚舉元素。
例如:
該枚舉名為weekday,枚舉值共有7個,即一周中的七天。凡被說明為weekday類型變數的取值只能是七天中的某一天。
2. 枚舉變數的說明
如同結構體(struct)和共用體(union)一樣,枚舉變數也可用不同的方式說明,即先定義後說明,同時定義說明或直接說明。
設有變數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;

記憶體空間

enum是枚舉型,所占記憶體空間恆等於4字;union是共用體,成員共用一個變數緩衝區。

賦值和使用

枚舉類型在使用中有以下規定:
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 friday6 saturday 7 sunday 8 monday 9 tuesday 10 wendsday11 thursday 12 friday 13 saturday 14 sunday 15 monday16 tuesday 17 wendsday 18 thursday 19 friday 20 saturday21 sunday 22 monday 23 tuesday 24 wendsday 25 thursday26 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

用法

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.javapackage net.javagarage.enums;/*We can loop over the values we put into the enumusing the values() method.Note that the enum Seasons is compiled into aseparate unit,called EnumDemo$Seasons.class*/public class EnumDemo{/*declare the enum and add values to it.note that,like in#,we don't sea‘;’toend this statement and we use commas to separate the values*/private enum Seasons{winter,spring,summer,fall}//listthevaluespublic 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.javaPurpose:show how to switch against the values in an enum.*/public class EnumSwitch{private enum Color{red,blue,green}//list the valuespublic static void main(String[]args){//refer to the qualified valuedoIt(Color.red);}/*note that you switch against the UNQUALIFIED name.that is,"caseColor.red:"is acompiler error*/private static void doIt(Color c){switch(c){case red:System.out.println("valueis"+Color.red);break;case green:System.out.println("valueis"+Color.green);break;case blue:System.out.println("valueis:"+Color.blue);break;default:System.out.println("default");}}}
為Enums添加屬性和方法
enums也可以象一般的類一樣添加方法和屬性,你可以為它添加靜態和非靜態的屬性或方法,這一切都象你在一般的類中做的那樣.
就是這么的簡單.但是有一點是需要注意的,那就是enums的值列表必須緊跟在enum聲明,不然編譯時將會出錯.
和類一樣enums也可以有自己的構造函式
儘管enums有這么多的屬性,但並不是用的越多越好,如果那樣還不如直接用類來的直接.enums的優勢在定義int最終變數僅當這些值有一定特殊含義時.但是如果你需要的是一個類,就定義一個類,而不是enum.

相關詞條

熱門詞條

聯絡我們