欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java枚舉enum和Enum類的使用

 更新時(shí)間:2023年03月02日 09:57:07   作者:Cyan_RA9  
本文主要介紹了java枚舉enum和Enum類的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、為什么需要枚舉?

對(duì)于某些有固定幾個(gè)對(duì)象的類,比如說(shuō)星期,月份,季節(jié)等等。它們可定義的對(duì)象數(shù)量是一定的,且不可更改。傳統(tǒng)的定義類的方式顯然無(wú)法滿足需求。

二、枚舉介紹

枚舉全稱Enumeration [? ?nu?m?? re??n],簡(jiǎn)稱Enum或者enum。枚舉是一組常量的集合。枚舉類屬于一種特殊的類,里面只包含一組有限的特定的對(duì)象。枚舉的出現(xiàn)可以解決上述的問(wèn)題。

三、枚舉的實(shí)現(xiàn)方式

1.自定義枚舉 :

步驟 :

①將自定義類的構(gòu)造器私有化,使其不能被隨隨便便地new出對(duì)象。

②取消類中提供的setXxx方法,僅保留getXxx方法,因?yàn)?ldquo;枚舉類”對(duì)象僅可讀,不能隨便修改對(duì)于對(duì)象的描述。

③直接在自定義類中創(chuàng)建一組對(duì)象,使用static + final的組合實(shí)現(xiàn)底層優(yōu)化。并且要對(duì)外暴露這組對(duì)象,因此要添加public修飾符來(lái)公開這組對(duì)象。

④枚舉對(duì)象名通常全部大寫,以符合常量的定義規(guī)范。

⑤枚舉對(duì)象根據(jù)需要,也可以有多個(gè)屬性。

演示 :

package knowledge.enum_;
 
/**
 * @author : Cyan_RA9
 * @version : 1.0
 */
public class Week {
    private String name;
 
    private Week(String name) {
        this.name = name;
    }
 
    public String getName() {
        return name;
    }
 
    public static final Week SUNDAY = new Week("Sunday");
    public static final Week MONDAY = new Week("Monday");
    public static final Week TUESDAY = new Week("Tuesday");
    public static final Week WEDNESDAY = new Week("Wednesday");
    public static final Week THURSDAY = new Week("Thursday");
    public static final Week FRIDAY = new Week("Friday");
    public static final Week SATURDAY = new Week("Saturday");
 
    @Override
    public String toString() {
        return "Week{" +
                "name='" + name + '\'' +
                '}';
    }
}
 
class Test {
    public static void main(String[] args) {
        System.out.println("一周的第" + 1 + "天是" + Week.SUNDAY);
        System.out.println("一周的第" + 2 + "天是" + Week.MONDAY);
        System.out.println("一周的第" + 3 + "天是" + Week.TUESDAY);
        System.out.println("一周的第" + 4 + "天是" + Week.WEDNESDAY);
        System.out.println("一周的第" + 5 + "天是" + Week.THURSDAY);
        System.out.println("一周的第" + 6 + "天是" + Week.FRIDAY);
        System.out.println("一周的第" + 7 + "天是" + Week.SATURDAY);
    }
}

運(yùn)行結(jié)果 :

2.enum關(guān)鍵字 :

步驟 :

①將自定義類的構(gòu)造器私有化,使其不能被隨隨便便地new出對(duì)象。

②取消類中提供的setXxx方法,僅保留getXxx方法,因?yàn)?ldquo;枚舉類”對(duì)象僅可讀,不能隨便修改對(duì)于對(duì)象的描述。

③在定義類時(shí),使用enum關(guān)鍵字替換掉class關(guān)鍵字。enum關(guān)鍵字用于聲明枚舉類。

④創(chuàng)建枚舉類對(duì)象時(shí),不再和自定義枚舉一樣使用“public + static + final”關(guān)鍵字的組合形式,而是直接“常量名(形參列表)”搞定。(實(shí)際調(diào)用的仍然是構(gòu)造器)。聲明枚舉對(duì)象時(shí),必須明確調(diào)用的是哪個(gè)構(gòu)造器。

⑤如果有多個(gè)常量對(duì)象,使用逗號(hào)','間隔即可。最后一個(gè)常量后加分號(hào)。

⑥如果使用enum來(lái)實(shí)現(xiàn)枚舉,語(yǔ)法規(guī)定常量必須寫在類的最前面,否則報(bào)錯(cuò)。

演示 :

package knowledge.enum_.introduction;
 
/**
 * @author : Cyan_RA9
 * @version : 1.0
 */
public enum Season {
    SPRING("Spring", "warm"), SUMMER("Summer", "hot"),
    AUTUMN("Autumn", "cool"), WINTER("Winter", "cold");
 
    private String name;
    private String portrait;
 
    private Season(String name, String portrait) {
        this.name = name;
        this.portrait = portrait;
    }
 
    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", portrait='" + portrait + '\'' +
                '}';
    }
}
 
class Test2 {
    public static void main(String[] args) {
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.AUTUMN);
        System.out.println(Season.WINTER);
    }
}

運(yùn)行結(jié)果 :

四、枚舉類補(bǔ)充

1.如果使用了enum關(guān)鍵字來(lái)聲明枚舉類,則聲明的枚舉類默認(rèn)繼承了Enum類,并且底層默認(rèn)是一個(gè)final類。

2.對(duì)于“1.”的證明 :

①通過(guò)Ctrl + H/h快捷鍵快速查看繼承關(guān)系,如下圖所示 :

②通過(guò)javap命令來(lái)證明,如下圖所示 :

3.若使用無(wú)參構(gòu)造創(chuàng)建枚舉對(duì)象,則后面的形參列表和括號(hào)都可以省略。如下圖所示 :

4.IDEA中直接創(chuàng)建枚舉類的方式 :

與接口類似,也是先按照正常創(chuàng)建類的流程來(lái)走,如下圖所示 :

選擇“Java Class”之后,在彈出的小窗口中選擇Enum,然后輸入枚舉類類名,回車即可,如下圖所示 :

創(chuàng)建好枚舉類之后,可以看到枚舉類的圖標(biāo)中間是一個(gè)“E”字母,如下圖所示 :

五、關(guān)于枚舉類的父類——Enum類

1.基本介紹 :

2.常用方法 :

①總覽

②演示 :

演示Ⅰ:name方法——得到當(dāng)前枚舉常量的名稱。(建議優(yōu)先使用toString方法)

Season類,Test類代碼如下 :

package knowledge.enum_.introduction;
 
public enum Season {
    SPRING("spring", "warm"), SUMMER("summer", "hot"),
    AUTUMN("autumn", "cool"), WINTER("winter", "cold");
 
    private Season() {}
 
    private String name;
    private String portrait;
 
    private Season(String name, String portrait) {
        this.name = name;
        this.portrait = portrait;
    }
 
    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", portrait='" + portrait + '\'' +
                '}';
    }
}
 
class Test2 {
    public static void main(String[] args) {
        //1.name
        Season season = Season.SPRING;
        Season season2 = Season.AUTUMN;
        System.out.println("season's name = " + season.name());
        System.out.println("season2's name = " + season2.name());
    }
}

運(yùn)行結(jié)果 :

演示Ⅱ:ordinal方法——返回當(dāng)前枚舉常量對(duì)應(yīng)的編號(hào)/次序。(即在枚舉類中的定義順序,第一個(gè)枚舉常量默認(rèn)從0開始編號(hào))

Season類代碼不變,Test類代碼如下 :

class Test2 {
    public static void main(String[] args) {
        //2.ordinal
        Season season = Season.SPRING;
        Season season2 = Season.AUTUMN;
        System.out.println("season's index = " + season.ordinal());
        System.out.println("season2's index = " + season2.ordinal());
    }
}

演示Ⅲ:values方法——可以返回一個(gè)當(dāng)前枚舉類型的數(shù)組,里面包含了當(dāng)前枚舉類中定義的所有枚舉對(duì)象。

PS : values方法 是隱藏的底層方法,可以通過(guò)javap命令反編譯找到,如下圖所示 :

Season類代碼不變,Test類代碼如下 :

class Test2 {
    public static void main(String[] args) {
        //3.values
        Season[] seasons = Season.values();
        for (Season season : seasons) {
            System.out.println(season);
        }
    }
}

運(yùn)行結(jié)果 :

演示Ⅳ:valueOf方法——將指定字符串轉(zhuǎn)換為枚舉對(duì)象,但要求該指定字符串必須為已有的枚舉常量名,否則報(bào)異常。

Season類代碼不變,Test類代碼如下 :

class Test2 {
    public static void main(String[] args) {
        //4.valueOf
        Season season_0 = Season.valueOf("SPRING");
        System.out.println("season_0's name = " + season_0);
 
        Season season_00 = Season.SPRING;
        System.out.println("season_00's name = " + season_00);
 
        System.out.println("season_0 和 season_00本質(zhì)上是同一個(gè)對(duì)象嗎?" + (season_0 == season_00));
    }
}

運(yùn)行結(jié)果 :

演示Ⅴ:compareTo方法——比較兩個(gè)枚舉常量的編號(hào)(返回值= 前編號(hào) - 后編號(hào))。如果返回值是0,說(shuō)明是同一個(gè)枚舉常量。

Season類代碼不變,Test類代碼如下 :

class Test2 {
    public static void main(String[] args) {
        //5.compareTo
        Season season_0 = Season.valueOf("SPRING");
        Season season_00 = Season.SPRING;
        System.out.println(season_0.compareTo(season_00));
        System.out.println("==============");
 
        Season season_2 = Season.AUTUMN;
        System.out.println(season_2.compareTo(season_0));
        System.out.println("==============");
        System.out.println(season_0.compareTo(season_2));
    }
}

運(yùn)行結(jié)果 :

六、關(guān)于enum實(shí)現(xiàn)接口的問(wèn)題

1.使用enum關(guān)鍵字聲明枚舉類之后,該枚舉類不可以再去繼承其他類。這是因?yàn)?,我們之前通過(guò)javap命令反編譯枚舉類后,可以看到枚舉類在底層隱式繼承了Enum類。而Java是單繼承機(jī)制,不支持多繼承。所以在枚舉類后使用extends關(guān)鍵字,IDEA會(huì)報(bào)錯(cuò),如下圖所示 :

2.enum關(guān)鍵字聲明的枚舉類雖然不能再去繼承其他類了,但是可以去實(shí)現(xiàn)接口。

演示 :

package knowledge.enum_.port;
 
/**
 * @author : Cyan_RA9
 * @version : 2.0
 */
public enum Season implements Climate {
    SPRING,SUMMER,AUTUMN,WINTER,SEASON;    //別忘記這些枚舉常量底層是如何實(shí)現(xiàn)的!
    @Override
    public void season_circumstance() {
        System.out.println(SPRING + ": warm");
        System.out.println(SUMMER + ": hot");
        System.out.println(AUTUMN + ": cool");
        System.out.println(WINTER + ": cold");
    }
 
    public static void main(String[] args) {
        Season.SEASON.season_circumstance();
    }
}
 
interface Climate {    
    public abstract void season_circumstance();
}

運(yùn)行結(jié)果 :

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

相關(guān)文章

  • SpringBoot密碼加密的實(shí)現(xiàn)示例

    SpringBoot密碼加密的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot密碼加密的實(shí)現(xiàn)示例,包括引入依賴、配置加密工具、生成加密密鑰、加密密碼、配置解密,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • springboot整合spring-retry的實(shí)現(xiàn)示例

    springboot整合spring-retry的實(shí)現(xiàn)示例

    本文將結(jié)合實(shí)例代碼,介紹springboot整合spring-retry的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • SpringMVC中的異常處理機(jī)制詳解

    SpringMVC中的異常處理機(jī)制詳解

    SpringMVC提供了基于xml和基于注解的異常處理機(jī)制,一般情況下兩者都要進(jìn)行配置,xml異常處理機(jī)制主要用于處理xml方式產(chǎn)生的異常,注解異常處理機(jī)制主要用于處理基于注解方式產(chǎn)生的異常,這篇文章主要介紹了SpringMVC中的異常處理機(jī)制,需要的朋友可以參考下
    2024-05-05
  • 一篇超詳細(xì)的Spring Boot對(duì)jdbc支持的文章

    一篇超詳細(xì)的Spring Boot對(duì)jdbc支持的文章

    JdbcTemplate 是在JDBC API基礎(chǔ)上提供了更抽象的封裝,并提供了基于方法注解的事務(wù)管理能力。 通過(guò)使用SpringBoot自動(dòng)配置功能并代替我們自動(dòng)配置beans,下面給大家介紹spring boot中使用JdbcTemplate相關(guān)知識(shí),一起看看吧
    2021-07-07
  • SpringCloud_Sleuth分布式鏈路請(qǐng)求跟蹤的示例代碼

    SpringCloud_Sleuth分布式鏈路請(qǐng)求跟蹤的示例代碼

    Spring Cloud Sleuth是一款針對(duì)Spring Cloud的分布式跟蹤工具,本文通過(guò)實(shí)例代碼介紹了SpringCloud_Sleuth分布式鏈路請(qǐng)求跟蹤,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • 一文帶你掌握J(rèn)ava?Future模式的靈活應(yīng)用

    一文帶你掌握J(rèn)ava?Future模式的靈活應(yīng)用

    Future模式,簡(jiǎn)單來(lái)說(shuō),就是一種能夠管理異步操作的方式,它可以讓咱們的程序在執(zhí)行一個(gè)耗時(shí)任務(wù)的同時(shí),還能繼續(xù)做其他事情,下面我們就來(lái)看看Future模式的具體應(yīng)用吧
    2024-01-01
  • SpringBoot使用@Value實(shí)現(xiàn)給靜態(tài)變量注入值

    SpringBoot使用@Value實(shí)現(xiàn)給靜態(tài)變量注入值

    這篇文章主要介紹了SpringBoot使用@Value實(shí)現(xiàn)給靜態(tài)變量注入值的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • springboot入門之profile設(shè)置方式

    springboot入門之profile設(shè)置方式

    這篇文章主要介紹了springboot入門?profile設(shè)置方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 詳解Jackson 使用以及性能介紹

    詳解Jackson 使用以及性能介紹

    這篇文章主要介紹了詳解Jackson 使用以及性能介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java 引用類型的數(shù)據(jù)傳遞的是內(nèi)存地址實(shí)例

    java 引用類型的數(shù)據(jù)傳遞的是內(nèi)存地址實(shí)例

    這篇文章主要介紹了java 引用類型的數(shù)據(jù)傳遞的是內(nèi)存地址實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評(píng)論