黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 一文讀懂Java枚舉類型有什么用

一文讀懂Java枚舉類型有什么用

更新時間:2022-06-23 11:04:14 來源:動力節點 瀏覽1343次

Java枚舉類型有什么用?動力節點小編來告訴大家。

Java枚舉的定義

類似類(class)和接口(interface)的定義,Java提供enum關鍵字用來定義枚舉類,在IDEA中創建枚舉類的菜單如下:

同樣定義一個季節的枚舉類, 代碼可以簡潔如下:

package cn.osxm.jcodef.func.base; public enum SeasonEnum { SPRING, SUMMER, AUTUMN, WINTER }

在枚舉類中直接列出常量,常量遵循全部大寫的規則。在上面的枚舉類示例代碼中,SPRING, SUMMER, AUTUMN, WINTER 是SeasonEnum的成員。

枚舉成員默認是final、public、static (所以可以使用SeasonEnum.SPRING方式調用枚舉成員)

每一個枚舉類型成員都可以看作是枚舉類的實例 (SeasonEnum.SPRING的類型也是SeasonEnum)

在JUnit使用測試如下:

@Test public void enumBase() { SeasonEnum season = SeasonEnum.SPRING; Assert.assertTrue(season.equals(SeasonEnum.SPRING)); }

Java 枚舉類的特性

Java枚舉類的特性有:

枚舉可以實現接口,但不能繼承接口,也不能被繼承。

枚舉類是final的,所以不能繼承。

枚舉類的構造方法是私有的

枚舉成員是靜態、final和public

枚舉成員是枚舉類的實例

但是從上面SeasonEnum枚舉類的定義來看,完全看不出這些特性,這些特性是怎么來的呢? 請看下面的原理探求。

Java枚舉類實現的原理探求

ava枚舉類型的奧秘就在編譯階段,枚舉類在編譯后會生成了一個擴展java.lang.Enum的類。這個可以通過JDK自帶的javap工具來反編譯生成的.class文件。對上面的生成的SeasonEnum.class文件進行反編譯,因為這個文件的包路徑是cnosxmjcodeffuncbase,所以在命令行使用如下命令:

javap -p cnosxmjcodeffuncbaseSeasonEnum.class

-p參數的意思是反編譯代碼中包含私有的方法, p是private的意思。

從控制臺輸出的反編譯后的源碼可以看出:

自定義的枚舉類會自動繼承java.lang.Enum類

每個成員變量都會被轉換為 private static final的枚舉類型的實例

自動添加private的構造函數 從反編譯后的源碼就不難理解Enum的特性了。

注意: 使用專門的Java反編譯工具,比如JD GUI、luyten等對Eumn進行反編譯的效果接近源碼的效果,無法看到繼承等特性,JD-GUI反編譯的效果和源碼時一致的,這也說明使用JD GUI來進行實際的反編譯還是不錯的。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲精品天堂在线观看 | 日日操夜夜操狠狠操 | 欧美日本道免费一区二区三区 | h成人在线| 日韩欧美亚洲综合 | 午夜小视频在线观看 | 91短视频网站 | 天天碰天天操 | 国产精品日韩欧美 | 国产成人a视频在线观看 | 97日日| 欧美午夜一区二区福利视频 | 国产三级视频网站 | a视频在线观看免费 | 成人国产在线视频 | 天天摸天天揉天天碰天天弄 | 最新欧美精品一区二区三区 | 国产精品久久免费视频 | 天天操天天干天搞天天射 | 成人免费福利 | 日韩欧美大片 | 涩涩小网站 | 1区1区3区4区产品亚洲 | 色爱区综合五月激情 | 老司机精品久久最新免费 | www.黄色片| 色天网站 | 97青草香蕉依人在线播放 | 国产黄色小视频 | 波多野结衣亚洲 | 欧美高清亚洲欧美一区h | 狠狠干夜夜爱 | 日韩精品视频免费网址 | 国产在线一二三区 | 日本免费中文字幕 | 一级片按摩 | 天天爽天天爽天天片a久久网 | 成视频年人黄网站免费视频 | 宅男深夜免费必看 | 日韩a级片在线观看 | 91青草久久久久久清纯 |