列舉與#define巨集的區別

才智咖 人氣:1.06W

1、#define 巨集常量是在預編譯階段進行簡單替換。列舉常量則是在編譯的時候確定其值。

列舉與#define巨集的區別

2、一般在編譯器裡,可以除錯列舉常量,但是不能除錯巨集常量。

3、列舉可以一次定義大量相關的常量,而#define 巨集一次只能定義一個。

拓展:

列舉簡單的說也是一種資料型別,只不過是這種資料型別只包含自定義的特定資料,它是一組有共同特性的資料的集合。舉個例子,顏色也可以定義成列舉型別。

它可以包含你定義的`任何顏色,當需要的時候,只需要通過列舉呼叫即可。

另外比如說季節(春夏秋冬)、星期(星期一到星期日)等等這些具有共同投特徵的資料都可以定義列舉。

用法一:常量

在JDK1.5 之前,我們定義常量都是: publicstaticfianl.... 。現在好了,有了列舉,可以把相關的常量分組到一個列舉型別裡,而且列舉提供了比常量更多的方法。

用法二:switch

JDK1.6之前的switch語句只支援int,char,enum型別,使用列舉,能讓我們的程式碼可讀性更強。

用法三:向列舉中新增新方法

如果打算自定義自己的方法,那麼必須在enum例項序列的最後新增一個分號。而且 Java 要求必須先定義 enum 例項。

用法四:覆蓋列舉的方法

下面給出一個toString()方法覆蓋的例子。

Java程式碼

public enum Color {

RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);

// 成員變數

private String name;

private int index;

// 構造方法

private Color(String name, int index) {

= name;

x = index;

}

//覆蓋方法

@Override

public String toString() {

return x+"_"+;

}

}

用法五:實現介面

所有的列舉都繼承自類。由於Java 不支援多繼承,所以列舉物件不能再繼承其他類。

用法六:使用介面組織列舉

Java程式碼

public interface Food {

enum Coffee implements Food{

BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO

}

enum Dessert implements Food{

FRUIT, CAKE, GELATO

}

}

用法七:關於列舉集合的使用

Set和Map是兩個列舉集合。EnumSet保證集合中的元素不重複;EnumMap中的 key是enum型別,而value則可以是任意型別。關於這個兩個集合的使用就不在這裡贅述,可以參考JDK文件。

關於列舉的實現細節和原理請參考:

TAGS:define 列舉