在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

你知道Java中枚舉的這些神仙用法嗎?

冬至子 ? 來源:JAVA旭陽 ? 作者:JAVA旭陽 ? 2023-06-05 11:44 ? 次閱讀

概述

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的插件看下生成的字節碼如下:

  1. 繼承了java.lang.Enum

圖片

  1. ENABLE、DISABLE最終轉換為靜態字段,類型其實StatusEnum這個類

圖片

  1. 類加載的時候初始化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
    +關注

    關注

    20

    文章

    2983

    瀏覽量

    106484
  • JAVA語言
    +關注

    關注

    0

    文章

    138

    瀏覽量

    20456
收藏 人收藏

    評論

    相關推薦

    C語言中枚舉的基本概念和常見用法

    在C語言中,枚舉是一種方便組織和表示一組相關常量的工具。枚舉類型有助于提高代碼的可讀性和可維護性。本文將介紹C語言枚舉的基本概念、語法和用法,以及一些高級技巧。
    發表于 08-17 15:32 ?1878次閱讀

    Java多線程的用法

    本文將介紹一下Java多線程的用法。 基礎介紹 什么是多線程 指的是在一個進程同時運行多個線程,每個線程都可以獨立執行不同的任務或操作。 與單線程相比,多線程可以提高程序的并發性和響應
    的頭像 發表于 09-30 17:07 ?1099次閱讀

    智能五筆:另類用法技巧知道嗎?

    智能五筆:另類用法技巧知道嗎? 智能五筆是很多朋友都喜歡使用的一種五筆輸入法,不過如果只是將其作為一款普通的輸入法來使用的話,那
    發表于 02-24 13:49 ?704次閱讀

    深入理解java枚舉類型enum用法

    enum 的全稱為 enumeration, 是 JDK 1.5 引入的新特性,存放在 java.lang 包。 下面是我在使用 enum 過程的一些經驗和總結。 原始的接口定義
    發表于 09-27 11:49 ?0次下載

    java并發編程實戰之輔助類用法

    Java并發編程:CountDownLatch、CyclicBarrier和Semaphore2017-09-18 13:07程序設計/58 在java 1.5,提供了一些非常有用的輔助類來幫助
    發表于 09-27 16:50 ?0次下載

    基于STM32的多種printf用法 知道嗎?

    基于STM32的多種printf用法知道嗎?
    的頭像 發表于 02-29 17:02 ?4829次閱讀

    go語言枚舉類型怎么用

    java 等,都有原生支持。在 go ,大家卻找不到 enum 或者其它直接用來聲明枚舉類型的關鍵字。從熟悉其它編程語言的開發者轉用 go 編程,剛開始會比較難接受這種情況。其實,如果
    的頭像 發表于 09-02 09:43 ?5358次閱讀

    示波器的這些安全操作知道嗎?

    示波器的這些安全操作知道嗎?示波器維修。很多人都知道示波器是用來干什么的,也知道示波器都有哪些種類和品牌,當然也
    發表于 11-05 11:19 ?1830次閱讀

    SystemVerilog枚舉類型的使用建議

    SystemVerilog枚舉類型雖然屬于一種“強類型”,但是枚舉類型還是提供了一些“不正經”的用法可以實現一些很常見的功能,本文將示例一些在枚舉
    的頭像 發表于 09-01 14:20 ?1953次閱讀

    如何正確區分Javasuper函數用法

    Javasuper函數有很多方法,在使用的時候我們應該如何正確區分? 2 方法 三種用法: 訪問父類的方法。 調用父類構造方法。 訪問父類的隱藏成員變
    的頭像 發表于 02-21 15:08 ?702次閱讀

    Java創建對象有哪些方式

    1 問題 作為Java開發者,經常創建很多對象,是否知道Java創建對象有哪些方式呢?
    的頭像 發表于 02-24 10:29 ?1197次閱讀

    Java枚舉的特點及用法

    Java 枚舉出現之前,通常會使用常量類來表示一組固定的常量值,直到Java 1.5之后推出了枚舉,那么枚舉類型有哪些特點,它比常量類又
    的頭像 發表于 09-30 10:02 ?1809次閱讀

    javaobj類型的實戰用法

    類型具有許多實戰用法,下面將詳細介紹一些常見的使用場景。 作為方法參數和返回值的類型 在Java,可以使用obj類型作為方法的參數或返回值類型。這種用法可以使方法具有更廣泛的適用性,
    的頭像 發表于 11-21 10:27 ?975次閱讀

    java switch case值能為枚舉值嗎

    Java的switch語句可以接受枚舉類型的值作為參數。在Java枚舉是一種特殊的數據類型
    的頭像 發表于 11-30 14:41 ?6059次閱讀

    Java 枚舉與策略模式、函數式接口的結合:實現高內聚低耦合的設計

    作者:京東物流 楊唯一 一、Java 枚舉Java 枚舉是一個特殊的類,一般表示一組常量,比如一年的 4 個季節,一年的 12 個月份,一個星期的 7 天,方向有東南西北等。 我們
    的頭像 發表于 11-21 14:06 ?490次閱讀
    主站蜘蛛池模板: 日韩欧美印度一级毛片 | 狠狠插狠狠操 | 日韩精品卡4卡5卡6卡7卡 | 黄色一级片播放 | 婷婷色天使在线视频观看 | 亚洲人成伊人成综合网久久 | 免费视频一区二区性色 | 天天拍天天射 | 分分操免费视频在线观看 | 在线观看视频在线观看 | 免费看又爽又黄禁片视频1000 | 欧美另类网| 日本在线观看永久免费网站 | 1000rt人体1000欧美| 色偷偷888欧美精品久久久 | 高清视频 一区二区三区四区 | 久久综合图片 | 无毒不卡在线观看 | 黄色福利站| 婷婷丁香激情五月 | 午夜影院性 | 男女爱爱视频免费看 | 小雪被老外黑人撑破了 | 日本加勒比视频在线观看 | 中国美女一级黄色片 | 26uuu影院亚洲欧美综合 | 男女交性视频免费视频 | 亚洲一级毛片在线观播放 | 在线色网站 | 国产免费小视频 | 美女张开腿露出尿口让男人桶 | 91视频看看| 女人被免费网站视频在线 | 69国产 | 五月婷婷开心综合 | 最新版天堂资源中文官网 | 免费公开视频人人人人人人人 | 91aaa免费观看在线观看资源 | 免费看一毛一级毛片视频 | 欧美午夜色视频国产精品 | 亚洲香蕉影视在线播放 |