溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java枚舉案例分析

發(fā)布時間:2022-05-26 14:02:51 來源:億速云 閱讀:141 作者:iii 欄目:編程語言

本文小編為大家詳細介紹“Java枚舉案例分析”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當(dāng),希望這篇“Java枚舉案例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

Java枚舉案例分析

枚舉就是要讓某個類型的變量的取值只能為若干個固定值中的一個,否則編譯器就會報錯,枚舉可以讓編譯器在編譯時就可以控制源程序賦給的非法值,使用普通變量的方式在開發(fā)階段無法實現(xiàn)這一目標(biāo)。
在JDK1.5之后,使用關(guān)鍵字enum定義一種新的類型,稱為枚舉類型
枚舉(enum)和類(class)、接口(interface)是同一級別

案例引入

定義一個color,只能定義紅、綠、藍三種顏色

普通方法
Java枚舉案例分析
那么如何解決這種問題,讓color只能在三種顏色中選一種???

Enum類和enum關(guān)鍵字

使用enum關(guān)鍵字定義的枚舉類,實際上就相當(dāng)于定義了一個類,此類繼承課Enum類而已。

public enum Color {
    RED,
    GREEN,
    BLUE;}

Java枚舉案例分析

枚舉常用的方法

protected Enum(String name,int ordinal)此構(gòu)造方法不能被外部直接調(diào)用,只能被其子類訪問,此構(gòu)造方法為自動調(diào)用
public final String name()返回枚舉的名字
public String toString()返回枚舉的名字
public final int ordinal()返回枚舉的序號,默認從0開始
public final boolean equals(Object other)判斷兩個枚舉是否相同

代碼

public class EnumTest {
    public static void main(String[] args) {
        //定義一個color變量,只能設(shè)置為RED、GREEN、BLUE
        Color color = Color.BLUE;
        System.out.println(color);
        System.out.println(color.name());
        System.out.println(color.toString());//三種方式都是打印名字
        System.out.println(color.ordinal());//返回枚舉的序號RED--0、GREEN--1、BLUE--2

        Color[] values = Color.values();//返回所有枚舉類型
        System.out.println(Arrays.toString(values));
    }}

Java枚舉案例分析

枚舉的基本操作

帶構(gòu)造方法的枚舉

枚舉的本質(zhì)是一個繼承Enum類的子類,JVM編譯器把枚舉編譯后生成一個final class

枚舉不允許從外部調(diào)用,所以只能是private修飾
Java枚舉案例分析
構(gòu)造方法只能在對象中調(diào)用
Java枚舉案例分析

public enum Color {
    RED(10),
    GREEN(20),
    BLUE;
    private int Number;//屬性

    private Color() {//默認構(gòu)造方法
        System.out.println("無參構(gòu)造器被調(diào)用了?。?!");
    }

    private Color(int Number) {
        this.Number = Number;
        System.out.println("有參構(gòu)造器被調(diào)用了!??!");
    }
    
    public int getNumber(){
        return Number;
	}}

主方法

public class EnumTest {
    public static void main(String[] args) {
        Color color = Color.RED;
        System.out.println(color.name());
        System.out.println(color.getNumber());//獲取Number的值
    }}

Java枚舉案例分析

枚舉實現(xiàn)接口

在枚舉類型中,可以繼承接口,實現(xiàn)接口有兩種方法,要么在枚舉類中實現(xiàn)該方法,或者在對象內(nèi)部實現(xiàn)該方法

方式1:在枚舉對象內(nèi)部實現(xiàn)接口中的方法

interface info{
    public String getColor();}public enum Color implements info{
    RED{
        @Override
        public String getColor() {return "紅色";}
    },
    GREEN{
        @Override
        public String getColor() {return "綠色";}
    },
    BLUE{
        @Override
        public String getColor() {return "藍色";}
    };}

方式2:在枚舉類中實現(xiàn)接口中的方法

interface info{
    public String getColor();}public enum Color implements info{

    RED,GREEN,BLUE;
    
    @Override
    public String getColor() {
        return null;
    }}

主方法

public class EnumTest {
    public static void main(String[] args) {
        Color color = Color.RED;
        System.out.println(color.getColor());
    }}

Java枚舉案例分析

枚舉實現(xiàn)抽象方法

在枚舉類型中,可以定義抽象方法,具體由對象實現(xiàn)

枚舉類

public enum Color {
    RED{
        @Override
        public String getColor() {return "紅色";}
    },
    GREEN{
        @Override
        public String getColor() {return "綠色";}
    },
    BLUE{
        @Override
        public String getColor() {return "藍色";}
    };
    //在枚舉中定義一個抽象方法,通過枚舉對象實現(xiàn)
    public abstract String getColor();}

主方法

public class EnumTest {
    public static void main(String[] args) {
        Color color = Color.BLUE;
        System.out.println(color.getColor());
    }}

Java枚舉案例分析

枚舉實現(xiàn)單例模式

枚舉是用來保證數(shù)據(jù)在指定范圍內(nèi)的值,如果枚舉中只有一個類型(一個值)的話,枚舉中就只有一個對象,那么就可以實現(xiàn)單例模式。

枚舉類

public enum Singletion {
    SINGLETION;
    public void Method(){
        System.out.println("使用枚舉實現(xiàn)單例模式?。?!");
    }}

主方法

public class EnumTest {
    public static void main(String[] args) {
        Singletion singletion=Singletion.SINGLETION;
        singletion.Method();
    }}

Java枚舉案例分析

集合類對枚舉的支持

在JDK1.5之后,對于Set和Map接口而言又增加了兩個新的子類:EnumSetEnumMap兩個子類

EnumSet

一個專門Set實現(xiàn)與枚舉類型一起使用。 枚舉集中的所有元素都必須來自創(chuàng)建集合時明確或隱式指定的單個枚舉類型
EnumSet是一個抽象類,不能直接創(chuàng)建實例對象,但是可以通過方法來使用。Java枚舉案例分析

EnumSet.allOf(Class<E> elementType)把一個枚舉類型全部填充到集合中去
public static <E extends Enum<E>> EnumSet<E> complementOf(EnumSet<E> s)創(chuàng)建與指定枚舉集具有相同元素類型的枚舉集,最初包含此類型的所有元素,該元素 不包含在指定的集合中。
public static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s)創(chuàng)建與指定的枚舉集相同的元素類型的枚舉集,最初包含相同的元素(如果有)

代碼

import java.util.EnumSet;public class EnumTest {
    public static void main(String[] args) {
        EnumSet<Color> set = EnumSet.allOf(Color.class);//把一個枚舉類型全部填充到集合中去
        for (Color c : set) {
            System.out.println(c.name());
        }
    }}

Java枚舉案例分析

EnumMap

EnumMap一個專門Map實現(xiàn)與枚舉類型鍵一起使用。 枚舉映射中的所有密鑰必須來自創(chuàng)建映射時明確或隱式指定的單個枚舉類型。 枚舉地圖在內(nèi)部表示為數(shù)組。 這種表示非常緊湊和高效。

代碼

import java.util.EnumMap;public class EnumTest {
    public static void main(String[] args) {
        EnumMap<Color, String> map = new EnumMap<>(Color.class);
        map.put(Color.RED, "紅色");
        map.put(Color.GREEN, "綠色");
        map.put(Color.BLUE, "藍色");
        System.out.println(map.get(Color.RED));
    }

Java枚舉案例分析

讀到這里,這篇“Java枚舉案例分析”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI