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

Java基礎之枚舉Enum類案例詳解

 更新時間:2021年05月07日 14:43:00   作者:辰兮要努力  
這篇文章主要介紹了Java基礎之枚舉Enum類案例詳解,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有很好的幫助,需要的朋友可以參考下

一、文章序言

Java中引用類型:數(shù)組、類、接口、枚舉、注解

枚舉這個既熟悉又陌生的東西具體再哪里可以使用呢?

在這里插入圖片描述

什么是枚舉?

枚舉是一個引用類型,枚舉就是一個規(guī)定了取值范圍的變量類型。

枚舉變量不能使用其他的數(shù)據(jù),只能使用枚舉中常量賦值。提高程序安全性;

//格式:
 public enum 枚舉名{ 
          //枚舉的取值范圍 
          //枚舉中可以生命方法 
} 

枚舉的使用場景介紹?

1、最常見的情況如星期,相關變量我們會在Java里面重復使用,在這里我們就可以來定義一個叫做“星期”的枚舉。

public enum Day
{
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, SATURDAY
}

如果不定義成枚舉,各位的寫法就千奇百怪了,比如“周一”、“星期一”、“Monday”等,寫法千奇百怪,定義枚舉一目了然。

2、比如說季節(jié)的春夏秋冬,我們同樣可以定義一個這樣的變量來存儲對應的季節(jié)。

public enum Season {
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER;
}

3、英雄聯(lián)盟里面,有很多職業(yè),比如說”戰(zhàn)士“、”法師“、”射手“……等職業(yè)。我們就可以定義一個叫”職業(yè)“的枚舉類型;后臺再其它地方哪里需要直接引用即可;

總結(jié):枚舉里面定義的就相當于是已經(jīng)生成且固定的對象,你可以直接使用;如果Java代碼里面與如上需要定義的常量可以直接定義一個枚舉類;

在這里插入圖片描述

定義枚舉類型時本質(zhì)上就是定義一個類別,只不過很多細節(jié)由編譯器幫我們完成了,所以某些程度上,enum關鍵字的作用 就像是class或interface

1 枚舉的本質(zhì):其實就是終止類,并繼承Enum抽象類。

2 枚舉中的變量,其實就是一個當前類型的靜態(tài)常量。

解釋:

當我們使用“enum”定義枚舉類型時,實質(zhì)上我們定義出來的類型繼承自java.lang.Enum類型,而枚舉的成員其實就是我們定義的枚舉類型的一 個實例(Instance),他們都被預設為final,所以我們無法改變他們,他們也是static成員,所以我們可以通過類型名稱直接使用他們,當然最重要的,他們都是公開的(public)。

二、代碼實踐

先定義一個枚舉:季節(jié)枚舉

//聲明一個表示季節(jié)的枚舉
public enum Season {
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER;
}

枚舉可以搭配switch語句使用:案例如下

public class TestSeasonEnum {
    public static void main(String[] args) {
        Season season = Season.SPRING;
        //switch小括號中的表達式類型可以是枚舉類型
        switch(season){
            //每個case后的常量直接寫枚舉的取值范
        case SPRING:
            System.out.println("春天");
            break;
        case SUMMER:
            System.out.println("夏天");
            break;
        case AUTUMN:
            System.out.println("秋天");
            break;
        case WINTER:
            System.out.println("冬天");
            break;
        }
    }
}

輸出結(jié)果

春天

為了加深理解,再舉例一個錯誤的用法

​ An enum switch case label must be the unqualified name of an enumeration constant
在這里插入圖片描述

注意,在switch中,不能使用枚舉類名稱,因為編譯器會根據(jù)switch()的類型來判定每個枚舉類型,在case中必須直接給出與()相同類型的枚舉選項,而不能再有類型。

在這里插入圖片描述

代碼如上可以直接測試,建議實測

三、面試相關

來來來,剛好抽時間一起整理一下常見面試問題吧,然后相關解析已經(jīng)附上詳細代碼學習,實踐實踐再實踐!

在這里插入圖片描述

1.枚舉允許繼承類嗎?

枚舉類使用enum定義后在編譯后默認繼承了java.lang.Enum類,而不是普通的繼承Object類。enum聲明類繼承了Serializable和Comparable兩個接口。且采用enum聲明后,該類會被編譯器加上final聲明(同String),故該類是無法繼承的。

所有枚舉類都默認是Enum類的子類,無需我們使用extends來繼承。

2.枚舉允許實現(xiàn)接口嗎?

枚舉允許實現(xiàn)接口。因為枚舉本身就是一個類,類是可以實現(xiàn)多個接口的。

public interface EnumInterface {
    public abstract void print();
}
public enum SizeEnum implements EnumInterface{
    BIG,MIDDLE,SMALL;

    @Override
    public void print() {
        System.out.println("繼承接口-重寫方法一次");
    }
}

3.枚舉可以用等號比較嗎?

肯定,因為在Enum類里面,已經(jīng)重寫了equals方法,而方法里面比較就是直接使用==,來比較2個對象的。所以,你在外邊直接使用==也是可以的。

在這里插入圖片描述

4.可以繼承枚舉嗎?

當然不能呀,枚舉類默認繼承了java.lang.Enum類,一個類怎么能繼承兩個類呢?

5.枚舉可以實現(xiàn)單例模式嗎?

枚舉本身就是一種對單例設計模式友好的形式,它是實現(xiàn)單例模式的一種很好的方式。

public class InstanceDemo {

    /**
     * 構造方法私有化
     */
    private InstanceDemo(){

    }

    /**
     * 返回實例
     * @return
     */
    public static InstanceDemo getInstance() {
        return Singleton.INSTANCE.getInstance();
    }

    /**
     * 使用枚舉方法實現(xiàn)單利模式
     */
    private enum Singleton {
        INSTANCE;

        private InstanceDemo instance;

        /**
         * JVM保證這個方法絕對只調(diào)用一次
         */
        Singleton() {
            instance = new InstanceDemo();
        }

        public InstanceDemo getInstance() {
            return instance;
        }
    }

//測試一下
    public static void main(String[] args) {
        InstanceDemo one =  InstanceDemo.getInstance();
        InstanceDemo two =  InstanceDemo.getInstance();
        System.out.println(one);
        System.out.println(two);
        System.out.println(one == two);
    }
}

創(chuàng)建的對象相同

csdn.test.recursion.demo.InstanceDemo@74a14482
csdn.test.recursion.demo.InstanceDemo@74a14482
true

6.當使用compareTo()比較枚舉時,比較的是什么?

int compareTo(E e):比較兩個枚舉常量誰大誰小,其實比較的就是枚舉常量在枚舉類中聲明的順序;返回值可以仔細看看源碼;

一起看看,底層代碼吧

 public final int compareTo(E o) {
        Enum<?> other = (Enum<?>)o;
        Enum<E> self = this;
        if (self.getClass() != other.getClass() && // optimization
            self.getDeclaringClass() != other.getDeclaringClass())
            throw new ClassCastException();
        return self.ordinal - other.ordinal;
    }

舉個例子你就能理解了

public class TestSeasonEnum {
    public static void main(String[] args) {
    
        Season season = Season.SPRING;
        Season season1 = Season.SUMMER;
        Season season2 = Season.AUTUMN;
        Season season3 = Season.WINTER;

        System.out.println(season.compareTo(season1));
        System.out.println(season.compareTo(season2));
        System.out.println(season.compareTo(season3));
    }
}

輸出結(jié)課,詳情參考源碼一看便知道

-1
-2
-3

7. 當使用equals()比較枚舉的時候,比較的是什么?

枚舉類型的equals()方法比較的是枚舉類對象的內(nèi)存地址,作用與等號等價。

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

相關文章

  • springboot發(fā)送郵件功能的實現(xiàn)代碼

    springboot發(fā)送郵件功能的實現(xiàn)代碼

    發(fā)郵件是一個很常見的功能,在java中實現(xiàn)需要依靠JavaMailSender這個接口,今天通過本文給大家分享springboot發(fā)送郵件功能的實現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • java防反編譯最簡單的技巧分享

    java防反編譯最簡單的技巧分享

    這篇文章主要給大家分享了關于java防反編譯最簡單的技巧,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-09-09
  • Java設計模式之裝飾者模式詳解和代碼實例

    Java設計模式之裝飾者模式詳解和代碼實例

    這篇文章主要介紹了Java設計模式之裝飾者模式詳解和代碼實例,Decorator模式(別名Wrapper):動態(tài)將職責附加到對象上,若要擴展功能,裝飾者提供了比繼承更具彈性的代替方案,需要的朋友可以參考下
    2014-09-09
  • SpringBoot中@FeignClient 注解的作用

    SpringBoot中@FeignClient 注解的作用

    Feign可以幫助我們定義和實現(xiàn)服務之間的 RESTful 接口,使得服務之間的調(diào)用更加方便和可靠,本文主要介紹了SpringBoot中@FeignClient 注解的作用,感興趣的可以了解一下
    2024-06-06
  • java 如何讀取遠程主機文件

    java 如何讀取遠程主機文件

    這篇文章主要介紹了java 如何讀取遠程主機文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Mapper層繼承BaseMapper<T>需要引入的pom依賴方式

    Mapper層繼承BaseMapper<T>需要引入的pom依賴方式

    這篇文章主要介紹了Mapper層繼承BaseMapper<T>需要引入的pom依賴方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring Boot 3.4.0 結(jié)合 Mybatis-plus 實現(xiàn)動態(tài)數(shù)據(jù)源的完整方案

    Spring Boot 3.4.0 結(jié)合 Mybatis-plus 實

    本文詳細介紹了在 Spring Boot 3.4.0 項目中結(jié)合 Mybatis-plus 實現(xiàn)動態(tài)數(shù)據(jù)源切換的完整方案,通過自定義注解和AOP切面,我們可以優(yōu)雅地實現(xiàn)方法級別的數(shù)據(jù)源切換,滿足多數(shù)據(jù)源場景下的各種需求,感興趣的朋友一起看看吧
    2025-04-04
  • IDEA如何切換數(shù)據(jù)庫版本mysql5或mysql8

    IDEA如何切換數(shù)據(jù)庫版本mysql5或mysql8

    本文介紹了如何將IntelliJ IDEA從MySQL5切換到MySQL8的詳細步驟,包括下載MySQL8、安裝、配置、停止舊服務、啟動新服務以及更改密碼等
    2025-01-01
  • SpringBoot中使用MyBatis-Plus實現(xiàn)分頁接口的詳細教程

    SpringBoot中使用MyBatis-Plus實現(xiàn)分頁接口的詳細教程

    MyBatis-Plus是一個MyBatis的增強工具,在MyBatis的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生,在SpringBoot項目中使用MyBatis-Plus可以大大簡化分頁邏輯的編寫,本文將介紹如何在 SpringBoot項目中使用MyBatis-Plus實現(xiàn)分頁接口
    2024-03-03
  • SpringBoot對接Twilio實現(xiàn)發(fā)送驗證碼和驗證短信碼

    SpringBoot對接Twilio實現(xiàn)發(fā)送驗證碼和驗證短信碼

    Twilio是一家提供云通信服務的公司,旨在幫助開發(fā)者和企業(yè)通過簡單的API實現(xiàn)各種通信功能,下面我們來看看如何對接Twilio實現(xiàn)發(fā)送驗證碼和驗證短信碼吧
    2025-03-03

最新評論

界首市| 湖口县| 山西省| 和政县| 临江市| 盈江县| 博爱县| 高阳县| 宜君县| 永济市| 霍邱县| 莆田市| 纳雍县| 合川市| 文安县| 南京市| 濮阳市| 南丰县| 工布江达县| 上杭县| 凤台县| 贺州市| 富裕县| 精河县| 仁怀市| 桐庐县| 台州市| 登封市| 阿克| 天津市| 曲水县| 日土县| 江达县| 福泉市| 泸溪县| 廊坊市| 高淳县| 桃江县| 和田县| 济阳县| 永福县|