複製鏈接
請複製以下鏈接發送給好友

ENUM

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

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

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內存空間

enum是枚舉型,所佔內存空間恆等於4字;union是共用體,成員共用一個變量緩衝區。

ENUM賦值和使用

枚舉類型在使用中有以下規定:
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 wednesday 4 thursday 5 friday
6 saturday 7 sunday 8 monday 9 tuesday 10 wednesday
11 thursday 12 friday 13 saturday 14 sunday 15 monday
16 tuesday 17 wednesday 18 thursday 19 friday 20 saturday
21 sunday 22 monday 23 tuesday 24 wednesday 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

ENUM用法

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#,we don't sea‘;’to
end this statement and we use commas to separate the values*/
private enum Seasons{
winter,spring,summer,fall
}
//listthevalues
public static void main(String[]args){
for(Seasons s:Seasons.values()){
System.out.println(s);
}
}
}
運行上述代碼你會得到 以下結果:
winter
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,"caseColor.red:"is a
compiler 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.