Java語法糖系列四:枚舉類型

目錄:
Java語法糖系列一:可變長(zhǎng)度參數(shù)和foreach循環(huán)
http://www.reibang.com/p/628568f94ef8

Java語法糖系列二:自動(dòng)裝箱/拆箱和條件編譯
http://www.reibang.com/p/946b3c4a5db6

Java語法糖系列三:泛型與類型擦除
http://www.reibang.com/p/4de08deb6ba4

Java語法糖系列四:枚舉類型
http://www.reibang.com/p/ae09363fe734

Java語法糖系列五:內(nèi)部類和閉包
http://www.reibang.com/p/f55b11a4cec2


枚舉

在JVM字節(jié)碼文件結(jié)構(gòu)中,并沒有“枚舉”這個(gè)類型团驱。
Java的枚舉類型轿亮,會(huì)在編譯期被編譯成一個(gè)普通了類。直接看代碼吧:

package lab;
public enum JavaSugarEnum {
Enum1(1, "Enum1"),
Enum2(2, "Enum2"),
Enum3(3, "Enum3");
private int key;
private String value;

public int getKey() {
    return key;
}

public String getValue() {
    return value;
}

private JavaSugarEnum(int key, String value){
    this.key = key;
    this.value = value;
}

public String get(int key) {
    for(JavaSugarEnum item : JavaSugarEnum.values()){
        if(item.getKey() == key)
            return item.getValue();
    }
    return "";
}}

編譯出來的代碼:

package lab;

public enum JavaSugarEnum
{
  Enum1, Enum2, Enum3;

  private int key;
  private String value;

  public int getKey()
  {
    return this.key;
 }

  public String getValue() {
    return this.value;
 }

  public String get(int paramInt)
      {
JavaSugarEnum[] arrayOfJavaSugarEnum = values(); 
int i = arrayOfJavaSugarEnum.length; 
for (int j = 0; j < i; ++j) { 
    JavaSugarEnum localJavaSugarEnum =arrayOfJavaSugarEnum[j];
  if (localJavaSugarEnum.getKey() == paramInt)
            return localJavaSugarEnum.getValue();
}
    return "";
  }
}

用JD打開class文福贞,代碼并沒有什么變化,唯一引起注意的是

JavaSugarEnum.values()  

變成了

 JavaSugarEnum[] arrayOfJavaSugarEnum = values();

說明編譯出來的字節(jié)碼會(huì)有values()函數(shù)停士,那我們用javap命令再反編譯一下看一看字節(jié)碼

javap -c JavaSugarEnum

去掉匯編代碼得到:

Compiled from "JavaSugarEnum.java"
public final class lab.JavaSugarEnum extends java.lang.Enum{
public static final lab.JavaSugarEnum Enum1;
public static final lab.JavaSugarEnum Enum2;
public static final lab.JavaSugarEnum Enum3;
public static lab.JavaSugarEnum[] values();
public static lab.JavaSugarEnum valueOf(java.lang.String);
public int getKey();
public java.lang.String getValue();
public java.lang.String get(int);
static {};
}

可以看到Java枚舉編譯后實(shí)際上是生成了一個(gè)類挖帘,該類繼承了 java.lang.Enum<E>完丽,并添加了一個(gè)返回枚舉數(shù)組的values()方法和valueOf()方法。

所以Enum類型就是一個(gè)語法糖拇舀,編譯器幫我們做了語法的解析和編譯逻族。
完全也可以自己實(shí)現(xiàn)一個(gè)枚舉類型。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骄崩,一起剝皮案震驚了整個(gè)濱河市聘鳞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌要拂,老刑警劉巖抠璃,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異脱惰,居然都是意外死亡搏嗡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門枪芒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彻况,“玉大人,你說我怎么就攤上這事舅踪∨Ω剩” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵抽碌,是天一觀的道長(zhǎng)悍赢。 經(jīng)常有香客問我,道長(zhǎng)货徙,這世上最難降的妖魔是什么左权? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮痴颊,結(jié)果婚禮上赏迟,老公的妹妹穿的比我還像新娘。我一直安慰自己蠢棱,他們只是感情好锌杀,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泻仙,像睡著了一般糕再。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玉转,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天突想,我揣著相機(jī)與錄音,去河邊找鬼。 笑死猾担,一個(gè)胖子當(dāng)著我的面吹牛袭灯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绑嘹,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼妓蛮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了圾叼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤捺癞,失蹤者是張志新(化名)和其女友劉穎夷蚊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體髓介,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惕鼓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唐础。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箱歧。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖一膨,靈堂內(nèi)的尸體忽然破棺而出呀邢,到底是詐尸還是另有隱情,我是刑警寧澤豹绪,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布价淌,位于F島的核電站,受9級(jí)特大地震影響瞒津,放射性物質(zhì)發(fā)生泄漏蝉衣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一巷蚪、第九天 我趴在偏房一處隱蔽的房頂上張望病毡。 院中可真熱鬧,春花似錦屁柏、人聲如沸啦膜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽功戚。三九已至,卻和暖如春似嗤,著一層夾襖步出監(jiān)牢的瞬間啸臀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乘粒,地道東北人豌注。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像灯萍,于是被迫代替她去往敵國和親轧铁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評(píng)論 25 707
  • 目錄:Java語法糖系列一:可變長(zhǎng)度參數(shù)和foreach循環(huán)http://www.reibang.com/p/62...
    Eric新之助閱讀 3,059評(píng)論 1 6
  • 以下為轉(zhuǎn)載旦棉,作者:張大虎 原文名:自我成長(zhǎng)的正確打開方式 1967年齿风,美國心理學(xué)家馬丁·賽里格曼(Martin S...
    龍暢天下閱讀 403評(píng)論 3 1
  • 一 夜家有女初長(zhǎng)成,名喚夜魅绑洛,取傾國傾城之意救斑。世人皆知,夜魅傾心于當(dāng)朝太子真屯,可偏偏天意弄人脸候,十七歲那一年,嫁...
    喵妹lora閱讀 806評(píng)論 2 1
  • 如果胡適要說先秦沒有法家之名绑蔫,這應(yīng)該是毫無爭(zhēng)議的运沦,同理,先秦亦無道家配深、陰陽家之名携添。但要說先秦沒有法家之實(shí)、無道家之...
    曹無傷閱讀 307評(píng)論 0 0