溫馨提示×

溫馨提示×

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

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

java枚舉類的使用介紹

發布時間:2020-04-22 13:56:39 來源:億速云 閱讀:163 作者:小新 欄目:編程語言

今天小編給大家分享的是java枚舉類的使用介紹,相信很多人都不太了解,為了讓大家更加了解java枚舉類,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。

java枚舉類的使用介紹

java枚舉類介紹:

一、什么情況下使用枚舉類?

有的時候一個類的對象是有限且固定的,這種情況下我們使用枚舉類就比較方便。

二、為什么不用靜態常量來替代枚舉類呢?

public static final int SEASON_SPRING = 1;    
public static final int SEASON_SUMMER = 2;    
public static final int SEASON_FALL = 3;    
public static final int SEASON_WINTER = 4;

枚舉類更加直觀,類型安全。使用常量會有以下幾個缺陷:

1. 類型不安全。若一個方法中要求傳入季節這個參數,用常量的話,形參就是int類型,開發者傳入任意類型的int類型值就行,但是如果是枚舉類型的話,就只能傳入枚舉類中包含的對象。

2. 沒有命名空間。開發者要在命名的時候以SEASON_開頭,這樣另外一個開發者再看這段代碼的時候,才知道這四個常量分別代表季節。

三、枚舉類入門

先看一個簡單的枚舉類。

package enumcase;public enum SeasonEnum {
    SPRING,SUMMER,FALL,WINTER;
}

enum和class、interface的地位一樣使用enum定義的枚舉類默認繼承了java.lang.Enum,而不是繼承Object類。枚舉類可以實現一個或多個接口。枚舉類的所有實例都必須放在第一行展示,不需使用new 關鍵字,不需顯式調用構造器。自動添加public static final修飾。使用enum定義、非抽象的枚舉類默認使用final修飾,不可以被繼承。枚舉類的構造器只能是私有的。

四、枚舉類介紹

枚舉類內也可以定義屬性和方法,可是是靜態的和非靜態的。

package enumcase;public enum SeasonEnum {
    SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");    
    private final String name;    
    private SeasonEnum(String name)
    {        this.name = name;
    }    public String getName() {        return name;
    }
}

實際上在第一行寫枚舉類實例的時候,默認是調用了構造器的,所以此處需要傳入參數,因為沒有顯式申明無參構造器,只能調用有參數的構造器。

構造器需定義成私有的,這樣就不能在別處申明此類的對象了。枚舉類通常應該設計成不可變類,它的Field不應該被改變,這樣會更安全,而且代碼更加簡潔。所以我們將Field用private final修飾。

五、枚舉類實現接口

枚舉類可以實現一個或多個接口。與普通類一樣,實現接口的時候需要實現接口中定義的所有方法,若沒有完全實現,那這個枚舉類就是抽象的,只是不需顯式加上abstract修飾,系統化會默認加上。

package enumcase;

public enum Operation {
    PLUS{

        @Override
        public double eval(double x, double y) {
            return x + y;
        }
        
    },
    MINUS{

        @Override
        public double eval(double x, double y) {
            return x - y;
        }
        
    },
    TIMES{

        @Override
        public double eval(double x, double y) {
            return x * y;
        }
        
    },
    DIVIDE{

        @Override
        public double eval(double x, double y) {
            return x / y;
        }
        
    };
    
    /**
     * 抽象方法,由不同的枚舉值提供不同的實現。
     * @param x
     * @param y
     * @return
     */
    public abstract double eval(double x, double y);
    
    public static void main(String[] args) {
        System.out.println(Operation.PLUS.eval(10, 2));
        System.out.println(Operation.MINUS.eval(10, 2));
        System.out.println(Operation.TIMES.eval(10, 2));
        System.out.println(Operation.DIVIDE.eval(10, 2));
    }
}

Operatio類實際上是抽象的,不可以創建枚舉值,所以此處在申明枚舉值的時候,都實現了抽象方法,這其實是匿名內部類的實現,花括號部分是一個類體。我們可以看下編譯以后的文件。

共生成了五個class文件,這樣就證明了PLUS,MINUS,TIMES,DIVIDE是Operation的匿名內部類的實例。

java枚舉類的使用介紹

六、switch語句里的表達式可以是枚舉值

Java5新增了enum關鍵字,同時擴展了switch。

package enumcase;

public class SeasonTest {
    public void judge(SeasonEnum s)
    {
        switch(s)
        {
        case SPRING:
            System.out.println("春天適合踏青。");
            break;
        case SUMMER:
            System.out.println("夏天要去游泳啦。");
            break;
        case FALL:
            System.out.println("秋天一定要去旅游哦。");
            break;
        case WINTER:
            System.out.println("冬天要是下雪就好啦。");
            break;
        }
    }
    
    public static void main(String[] args) {
        SeasonEnum s = SeasonEnum.SPRING;
        SeasonTest test = new SeasonTest();
        test.judge(s);
    }
}

case表達式中直接寫入枚舉值,不需加入枚舉類作為限定。

以上就是java枚舉類的使用介紹的詳細內容了,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎來億速云行業資訊!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女