Java枚舉類

你之因此能優於別人,正是由於你堅持了別人所不能堅持的。
本文相關代碼在個人Github,歡迎Star~
https://github.com/zhangzhibo1014/DaBoJava

枚舉類

枚舉(enum)類型是 Java 5 新增的特性,它是一種新的類型,容許用常量來表示特定的數據片段,並且所有都以類型安全的形式來表示。java

枚舉類定義

  • enumclassinterface 具備相同地位
  • 默認繼承 java.lang.Enum 類,因此不能繼承其餘類,其中 java.lang.Enum 類實現了 java.lang.Serializablejava.lang.Comparable 接口
  • 使用 enum 定義,默認使用 final 修飾,所以不能派生子類
  • 構造器默認使用 private 修飾,且只能使用 private 修飾
  • 枚舉類的全部實例必須在枚舉類的第一行顯式列出,不然這個枚舉類永遠不能產生實例
  • 列出這些實例時,會自動添加 public static final 修飾,無需顯式添加

無構造函數的枚舉類

/**
 * 枚舉類
 */
public class Demo {
    public static void main(String[] args) {
        //聲明一個枚舉類實例,並賦值
        Season season = Season.SPRING;
        switch(season) {
            case SPRING:
                System.out.println("Spring");
                break;
            case SUMMER:
                System.out.println("Summer");
                break;
            case FALL:
                System.out.println("Fall");
                break;
            case WINTER:
                System.out.println("Winter");
                break;
            default:
                break;
        }
    }
}

/**
 * 定義一個枚舉類
 */
enum Season{
    SPRING, SUMMER, FALL, WINTER
}

有構造函數的枚舉類

public enum Health{

    GOOD(0, "良好"),
    SICK(1, "生病"),
    FINE(2, "健康");

    private int code;
    private String name;

    private Health(int code, String name) {
        this.code = code;
        this.name = name;
    }

    public int getCode() {
        return code;
    }

    public String getName() {
        return name;
    }
}

枚舉的方法

int compareTo(Enum e):用於比較兩個枚舉類型的順序,若是該枚舉類型位於枚舉類型e以後,則返回正數,反之返回負數,相同返回零
values():返回一個枚舉類型的數組,能夠用來遍歷枚舉類
String name():返回枚舉實例的枚舉值。
int ordinal():返回枚舉實例的聲明順序,從0開始
T valueOf(Class<T> enumType, String name):返回帶指定名稱的指定枚舉類型的枚舉常量。
boolean equals():用來比較兩個枚舉對象的枚舉值。相同返回true,反之返回false
                  也可使用 == 來比較
                  
public class Demo2 {
    public static void main(String[] args) {
        Health health = Health.GOOD;
        Health health1 = Health.FINE;
        Health health2 = Health.SICK;
        Health health3 = Health.GOOD;

        //compareTo()
        System.out.println(health.compareTo(health1));
        System.out.println(health1.compareTo(health2));
        //values()
        Health[] healths = Health.values();
        for(Health h : healths) {
            System.out.print(h + " ");
        }
        System.out.println();
        //name()
        System.out.println(health.name());
        //ordinal()
        System.out.println(health2.ordinal());
        //valueOf()
        Health health4 = Health.valueOf(Health.class, health2.name());
        System.out.println(health4);
        //equals()
        System.out.println(health.equals(health3));
        System.out.println(health == health3);
    }
}
/**
 * 枚舉類
 */
enum Health{
    GOOD(0, "良好"),
    SICK(1, "生病"),
    FINE(2, "健康");

    private int code;
    private String name;

    private Health(int code, String name) {
        this.code = code;
        this.name = name;
    }

    public int getCode() {
        return code;
    }

    public String getName() {
        return name;
    }
}

枚舉實現原理

實際上在使用關鍵字 enum 建立枚舉類型並編譯後,編譯器會爲咱們生成一個相關的類,這個類繼承了 Java API 中的 java.lang.Enum 類,也就是說經過關鍵字 enum 建立枚舉類型在編譯後事實上也是一個類類型並且該類繼承自 java.lang.Enumgit

總結

枚舉類能夠代替常量來使用,好比:狀態碼,星期等,結合實際場景使用。github

相關代碼記錄於GitHub中,歡迎各位夥伴 Star數組

有任何疑問 微信搜一搜 [程序猿大博] 與我聯繫~安全

若是以爲對您有所幫助,請 點贊收藏 ,若有不足,請評論或私信指正!謝謝~微信

相關文章
相關標籤/搜索