枚舉資料筆記

概念:
被enum關(guān)鍵字修飾的類型就是枚舉類型,枚舉類型都隱式繼承Enum,根據(jù)java不可以多繼承的原理,不能再繼承其他類
枚舉類型中類可以定義變量和方法,如果不添加如何方法,枚舉值的默認(rèn)值默認(rèn)從0開(kāi)始
枚舉類型的構(gòu)造方法必須是私有的,

[public]enum 枚舉類型名稱[implements 接口名稱列表]
{
    枚舉值;
    變量成員聲明及初始化;
    方法聲明及方法體;
}

示例:
    enum Color{Red,BLUE,GREEN}

方法:
values():主要返回enum實(shí)例的數(shù)組,而且該數(shù)組中的元素嚴(yán)格保持在enum中聲明時(shí)的順序。
靜態(tài)的values()方法用于獲得枚舉類型的枚舉值的數(shù)組
toString():返回枚舉值字符串的描述
name():返回實(shí)例名
ordinal(): 返回實(shí)例聲明時(shí)的次序,從0開(kāi)始。
getDeclaringClass():返回實(shí)例所屬的enum類型
valueOf():方法將以字符串形式表示的枚舉值轉(zhuǎn)化為枚舉類型的對(duì)象
equals():判斷是否為同一個(gè)對(duì)象。也可以使用 == 來(lái)比較 enum實(shí)例

特性:
除了不能被繼承,可以把它當(dāng)作一個(gè)常規(guī)的類。不能被繼承是因?yàn)槟J(rèn)都是public static final
不可以使用=賦值,可以通過(guò)方法來(lái)顯示賦值
enum可以有普通方法,靜態(tài)方法,抽象方法,構(gòu)造方法
可以實(shí)現(xiàn)接口

工具類:
EnumSet:枚舉類型Set實(shí)現(xiàn),它要求放入它的枚舉常量必須屬于同一個(gè)枚舉類型。

EnumMap:是枚舉類型的Map實(shí)現(xiàn),相對(duì)比較高效,它也是只能接收同一個(gè)枚舉類型的實(shí)例作為鍵值。

public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { ... }

//枚舉可以添加普通方法、靜態(tài)方法、抽象方法、構(gòu)造方法
public enum ErrorCode {
OK(0) {
public String getDescription() {
return "成功";
}
},
ERROR_A(100) {
public String getDescription() {
return "錯(cuò)誤A";
}
},
ERROR_B(200) {
public String getDescription() {
return "錯(cuò)誤B";
}
};

private int code;

// 構(gòu)造方法:enum的構(gòu)造方法只能被聲明為private權(quán)限或不聲明權(quán)限
private ErrorCode(int number) { // 構(gòu)造方法
    this.code = number;
}
public int getCode() { // 普通方法
    return code;
} // 普通方法
public abstract String getDescription(); // 抽象方法
public static void main(String args[]) { // 靜態(tài)方法
    for (ErrorCode s : ErrorCode.values()) {
        System.out.println("code: " + s.getCode() + ", description: " + s.getDescription());
    }
}

}

// EnumSet的使用
System.out.println("EnumSet展示");
EnumSet<ErrorCodeEn> errSet = EnumSet.allOf(ErrorCodeEn.class);
for (ErrorCodeEn e : errSet) {
System.out.println(e.name() + " : " + e.ordinal());
}

// EnumMap的使用
System.out.println("EnumMap展示");
EnumMap<StateMachine.Signal, String> errMap = new EnumMap(StateMachine.Signal.class);
errMap.put(StateMachine.Signal.RED, "紅燈");
errMap.put(StateMachine.Signal.YELLOW, "黃燈");
errMap.put(StateMachine.Signal.GREEN, "綠燈");
for (Iterator<Map.Entry<StateMachine.Signal, String>> iter = errMap.entrySet().iterator(); iter.hasNext();) {
Map.Entry<StateMachine.Signal, String> entry = iter.next();
System.out.println(entry.getKey().name() + " : " + entry.getValue());
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 第十九章、枚舉類型 概述: 關(guān)鍵字enum:可以將一組具名的值的有限集合創(chuàng)建為一種新的類型(Class),而這些具...
    編程家園閱讀 166評(píng)論 0 0
  • 1. 概述 枚舉(enum)全寫(xiě)為的全稱為:enumeration。是jdk1.5才新引進(jìn)的概念,在Java中en...
    WY長(zhǎng)河閱讀 707評(píng)論 0 0
  • 18.7.18一、概述枚舉常量在類型安全性和便捷性都很有保證,如果出現(xiàn)類型問(wèn)題編譯器也會(huì)提示我們改進(jìn)。除了不能繼承...
    靜心安分讀書(shū)閱讀 551評(píng)論 0 0
  • 一。基本enum(枚舉)特征 0.創(chuàng)建枚舉時(shí)編譯器(javac 生成.class)會(huì)為我們生成一個(gè)相關(guān)的類,通過(guò)反...
    愛(ài)我中華_688c閱讀 696評(píng)論 0 1
  • 本文發(fā)表于KuTear's Blog,轉(zhuǎn)載請(qǐng)注明 默認(rèn)枚舉繼承至Enum類,由于Java的單一繼承機(jī)制,所以不能在...
    KuTear閱讀 445評(píng)論 0 1