最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文了解Java中枚舉的使用

 更新時間:2022年09月04日 10:57:00   作者:JAVA旭陽  
Java中枚舉,大家在項目中經(jīng)常使用吧,主要用來定義一些固定值。那你了解枚舉的本質(zhì)嗎?了解枚舉的一些常見用法嗎?本文就來為大家一一進行詳解

概述

Java中枚舉,大家在項目中經(jīng)常使用吧,主要用來定義一些固定值,在一個有限的集合內(nèi),比如在表示一周的某一天,一年中的四季等。那你了解枚舉的本質(zhì)嗎?了解枚舉的一些常見用法嗎?

枚舉介紹和使用

枚舉主要用來定義一個有限集合內(nèi)的固定值。

枚舉定義方式如下:

// 簡單的定義
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這個類,后面詳細講解,我們看下這個類的關(guān)鍵方法:

static Enum valueOf(Class enumClass, String name)

返回指定名字、給定類的枚舉常量

String toString()

返回枚舉常量名

int ordinal()

返回枚舉常量在enum中的位置,從0開始

int compareTo(E other)

如果枚舉場景出現(xiàn)在other之前,則返回一個負值,如果this == other,則返回0,否則返回正值。

public static void main(String[] args) {
        // 根據(jù)字符串獲取枚舉
        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());
        }
    }

運行結(jié)果:

枚舉的本質(zhì)

枚舉的本質(zhì)其實一個類,繼承了java.lang.Enum這個類。我們可以用idea的插件看下生成的字節(jié)碼如下:

繼承了java.lang.Enum

ENABLE、DISABLE最終轉(zhuǎn)換為靜態(tài)字段,類型其實StatusEnum這個類

類加載的時候初始化ENABLE、DISABLE這兩個屬性。

方法是類加載的初始化階段就是執(zhí)行的,它這里的主要邏輯就是創(chuàng)建了兩個對象,設置到ENABLE,DISABLE上。

這下你明白枚舉是怎么一會事情了吧。

枚舉常見用途

枚舉創(chuàng)建單例

枚舉可以作為單例模式的最佳方式,能夠保證單例對象的唯一性。

public class User {
    //私有化構(gòu)造函數(shù)
    private User(){ }
 
    //定義一個靜態(tài)枚舉類
    static enum SingletonEnum{
        //創(chuàng)建一個枚舉對象,該對象天生為單例
        INSTANCE;
        private User user;
        //私有化枚舉的構(gòu)造函數(shù)
        private SingletonEnum(){
            user = new User();
        }
        public User getInstnce(){
            return user;
        }
    }
 
    //對外暴露一個獲取User對象的靜態(tài)方法
    public static User getInstance(){
        return SingletonEnum.INSTANCE.getInstnce();
    }
}

枚舉INSTANCE會在類加載初始化的時候創(chuàng)建,而Java類的加載和初始化過程都是線程安全的。

枚舉可避免反序列化破壞單例。

枚舉抽象方法

枚舉類可以定義抽象方法,然后讓各個具體的枚舉實現(xiàn),可以通過枚舉實現(xiàn)不同的策略實現(xiàn)。

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;
    }
}

到此這篇關(guān)于一文了解Java中枚舉的使用的文章就介紹到這了,更多相關(guān)Java枚舉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • CentOS 7快速安裝jdk

    CentOS 7快速安裝jdk

    這篇文章主要為大家詳細介紹了CentOS 7快速安裝jdk的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • SpringBoot+MybatisPlus+Mysql+JSP實戰(zhàn)

    SpringBoot+MybatisPlus+Mysql+JSP實戰(zhàn)

    這篇文章主要介紹了SpringBoot+MybatisPlus+Mysql+JSP實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java如何向主函數(shù)main中傳入?yún)?shù)

    Java如何向主函數(shù)main中傳入?yún)?shù)

    這篇文章主要介紹了Java如何向主函數(shù)main中傳入?yún)?shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java實現(xiàn)打字游戲小程序

    java實現(xiàn)打字游戲小程序

    這篇文章主要為大家詳細介紹了java實現(xiàn)打字游戲小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 學習Java的static與final關(guān)鍵字

    學習Java的static與final關(guān)鍵字

    本篇文章給大家詳細分析了Java的static與final關(guān)鍵字知識點以及相關(guān)代碼分享,有需要的讀者跟著學習下吧。
    2018-03-03
  • swing中Tree與滾動條用法實例分析

    swing中Tree與滾動條用法實例分析

    這篇文章主要介紹了swing中Tree與滾動條用法,以實例形式分析了java基于swing實現(xiàn)圖形界面的使用技巧,需要的朋友可以參考下
    2015-09-09
  • Java中多種循環(huán)Map的常見方式詳解

    Java中多種循環(huán)Map的常見方式詳解

    Java中的Map是一種鍵值對存儲的數(shù)據(jù)結(jié)構(gòu),其中每個鍵都唯一,與一個值相關(guān)聯(lián),下面這篇文章主要給大家介紹了關(guān)于Java中多種循環(huán)Map的常見方式,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2024-01-01
  • 分布式難題ElasticSearch解決大數(shù)據(jù)量檢索面試

    分布式難題ElasticSearch解決大數(shù)據(jù)量檢索面試

    這篇文章主要為大家介紹了分布式面試難題,ElasticSearch解決大數(shù)據(jù)量檢索的問題分析回答,讓面試官無話可說,幫助大家實現(xiàn)面試開薪自由
    2022-03-03
  • Java中替代equals,compareTo和toString的方法

    Java中替代equals,compareTo和toString的方法

    這篇文章主要介紹了Java中替代equals,compareTo和toString的方法,文中代碼十分詳細,幫助大家更好的理解的學習,感興趣的朋友可以了解下
    2020-06-06
  • 簡單談談Java遍歷樹深度優(yōu)先和廣度優(yōu)先的操作方式

    簡單談談Java遍歷樹深度優(yōu)先和廣度優(yōu)先的操作方式

    這篇文章主要介紹了簡單談談Java遍歷樹深度優(yōu)先和廣度優(yōu)先的操作方式的相關(guān)資料,需要的朋友可以參考下
    2023-03-03

最新評論

天峨县| 赣州市| 定襄县| 巴林右旗| 盐津县| 班玛县| 突泉县| 漠河县| 库尔勒市| 勐海县| 铜川市| 巨鹿县| 循化| 奎屯市| 北安市| 长治市| 彰化市| 南通市| 甘德县| 措勤县| 沐川县| 乾安县| 衡水市| 清新县| 紫金县| 万全县| 加查县| 祁阳县| 尼勒克县| 永城市| 建阳市| 墨江| 周至县| 徐汇区| 黄山市| 全州县| 集贤县| 丰都县| 旺苍县| 剑川县| 四会市|