<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Java中列舉,大家在專案中經常使用吧,主要用來定義一些固定值,在一個有限的集合內,比如在表示一週的某一天,一年中的四季等。那你瞭解列舉的本質嗎?瞭解列舉的一些常見用法嗎?
列舉主要用來定義一個有限集合內的固定值。
列舉定義方式如下:
// 簡單的定義 enum WeekEnum { MONDAY, TUESDAY } // 有屬性的定義 enum StatusEnum { ENABLE("1", "啟用"), DISABLE("0", "禁用"); private String code; private String name; StatusEnum(String code, String name) { this.code = code; this.name = name; } }
列舉編譯後實際上繼承了java.lang.Enum這個類,後面詳細講解,我們看下這個類的關鍵方法:
static Enum valueOf(Class enumClass, String name)
返回指定名字、給定類的列舉常數
String toString()
返回列舉常數名
int ordinal()
返回列舉常數在enum中的位置,從0開始
int compareTo(E other)
如果列舉場景出現在other之前,則返回一個負值,如果this == other,則返回0,否則返回正值。
public static void main(String[] args) { // 根據字串獲取列舉 StatusEnum enable = Enum.valueOf(StatusEnum.class, "ENABLE"); System.out.println(enable); //列舉比較直接用== System.out.println(enable == StatusEnum.ENABLE); // values方法獲取所有的列舉 StatusEnum[] values = StatusEnum.values(); for (StatusEnum statusEnum : values) { // 列印列舉的位置 System.out.println(statusEnum.ordinal()); } }
執行結果:
列舉的本質其實一個類,繼承了java.lang.Enum這個類。我們可以用idea的外掛看下生成的位元組碼如下:
繼承了java.lang.Enum
ENABLE、DISABLE最終轉換為靜態欄位,型別其實StatusEnum這個類
類載入的時候初始化ENABLE、DISABLE這兩個屬性。
方法是類載入的初始化階段就是執行的,它這裡的主要邏輯就是建立了兩個物件,設定到ENABLE,DISABLE上。
這下你明白列舉是怎麼一會事情了吧。
列舉可以作為單例模式的最佳方式,能夠保證單例物件的唯一性。
public class User { //私有化建構函式 private User(){ } //定義一個靜態列舉類 static enum SingletonEnum{ //建立一個列舉物件,該物件天生為單例 INSTANCE; private User user; //私有化列舉的建構函式 private SingletonEnum(){ user = new User(); } public User getInstnce(){ return user; } } //對外暴露一個獲取User物件的靜態方法 public static User getInstance(){ return SingletonEnum.INSTANCE.getInstnce(); } }
列舉INSTANCE會在類載入初始化的時候建立,而Java類的載入和初始化過程都是執行緒安全的。
列舉可避免反序列化破壞單例。
列舉類可以定義抽象方法,然後讓各個具體的列舉實現,可以通過列舉實現不同的策略實現。
enum OperEnum { ADD(1, 2) { @Override public Integer operate() { return this.getA() + this.getB(); } }, MULTIPY(1, 2) { @Override public Integer operate() { return this.getA() * this.getB(); } }; private Integer a; private Integer b; OperEnum(Integer a, Integer b) { this.a = a; this.b = b; } public abstract Integer operate(); public Integer getA() { return a; } public void setA(Integer a) { this.a = a; } public Integer getB() { return b; } public void setB(Integer b) { this.b = b; } }
到此這篇關於一文了解Java中列舉的使用的文章就介紹到這了,更多相關Java列舉內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45