Java枚舉類的簡單使用

參考:
https://www.cnblogs.com/zhanqing/p/11076646.html

關鍵字enum

Java中,枚舉類型使用關鍵字enum進行聲明,它是一種特殊的類。
通過關鍵字enum創建的枚舉類型,在編譯後事實上也是一個類類型,而且該類繼承自java.lang.Enum類,同時編譯器會將枚舉類標記爲final類。由於Java並不是支持多繼承,所以enum聲明的枚舉類不能再繼承其他類。

enum NotPossible extends Pet{} // 不正確

實際上,在Java中,多繼承的功能可以通過多實現來實現,即實現一個或多個接口。

相關細節

Java要求必須先定義枚舉實例(枚舉常量)。如果在定義枚舉實例之前定義了任何方法或屬性,那麼編譯會報錯。
如果打算在枚舉類中定義(或重寫)方法,則需要在枚舉實例序列的最後添加分號“;”。
只能在枚舉類的內部使用其構造器創建枚舉實例。事實上,構造器只在構造枚舉實例時被調用,一旦枚舉類的定義結束,編譯器就不允許我們再使用其構造器來創建任何實例了,所以一般將枚舉類的構造器定義爲private,當然即使我們使用其他權限修飾符定義構造器,也無法在外部生成枚舉實例,這是由編譯器保證的
除此之外,我們也可以自定義構造函數。在聲明枚舉實例的同時給構造函數傳入實參,這樣便可以使用實參,添加對每個枚舉實例的描述。然後使用重寫的toString(),返回這個描述信息。而默認的toString()方法只能返回枚舉實例的名字。
在繼承自Enum類的方法中,只有toString()不是final的。換句話說,枚舉類只能重寫(覆蓋)toString()方法。但是可以向枚舉類中添加方法。

枚舉類的相關方法

比較2個枚舉常量是否相等,可以使用==,也可以使用equals方法。
name() : 返回枚舉實例聲明時的名字,這與使用默認的toString()方法效果相同。
values() : 返回一個包含所有枚舉實例的數組,其類型爲枚舉類。
ordinal(): 返回枚舉實例對應的位置(位置從0開始)
int compareTo(E other): 用來比較如果枚舉實例出現在Other之前,則返回一個負值;如果this=other,則返回0;否則返回正值。枚舉常量的出現次序在enum聲明中給出。

代碼示例

獲取枚舉實例

	// 獲取枚舉實例的方法1
	ColorEnum s1 = ColorEnum.RED;	
	// 獲取枚舉實例的方法2
	ColorEnum s2 = Enum.valueOf(ColorEnum .class, "WHITE");

獲取枚舉實例的位置

枚舉實例的位置,同定義時的順序一致,位置從0開始計數。

	// 獲取枚舉實例的位置【從0開始】
	int index = s2.ordinal();

比較2個枚舉實例

	int resBe = s1.compareTo(s2);
	System.out.println("resBe = "+resBe); 

比較2個枚舉實例是否相等

	if(s2==s1){System.out.println("相等");}
	else{ System.out.println("不相等");}
	// 使用equals方法
	if(s2.equals(s1)){System.out.println("相等");}
	else{ System.out.println("不相等");}

獲取全部枚舉實例

可以使用values方法獲取全部的枚舉實例。

	ColorEnum [] arrs = ColorEnum.values();
	// 打印所有枚舉實例
	for(ColorEnum s:arrs)
	{
		System.out.println(s.toString());
	}

不重寫toString方法

在原始情況下,即沒有重寫toString方法時,枚舉類的name方法和toString方法返回的結果是一樣的。

主函數

public class ColorEnumTest {
	public static void main(String[] args) {
		// 獲得枚舉實例
		ColorEnum s1 = ColorEnum.RED;
		// 得到枚舉實例的描述
		System.out.println(s1.toString());
		System.out.println(s1.name());
	}
}

ColorEnum 類

public enum ColorEnum {
	// 枚舉實例
	 RED,GREEN,WHITE,YELLOW;
}

重寫toString方法添加對枚舉實例的描述

主函數

可以看到,ColorEnum枚舉類的構造函數被調用了4次,正好對應4個枚舉實例。也就是說每生成1個枚舉實例,編譯器都會自動調用該枚舉類的構造函數。

public class ColorEnumTest {
	public static void main(String[] args) {
		// 獲得枚舉實例
		ColorEnum s1 = ColorEnum.RED;
		// 使用重寫的toString方法得到枚舉實例的描述
		System.out.println(s1.toString());
		System.out.println(s1.name());
	}
}

ColorEnum 類

public enum ColorEnum {
	// 枚舉實例,生成實例的時候調用了構造器,括號內都是傳給構造器的實參
    RED("紅色",1),GREEN("綠色",2),WHITE("白色",3),YELLOW("黃色",4);
    // 成員變量
    private String name;
    private int index;
    // 私有的構造方法
    private ColorEnum(String name,int index) {
    	System.out.println("Color的構造方法");
        this.name = name;
        this.index = index;
    }
    // 重寫toString方法
    @Override
    public String toString() {
        return this.index + "--" + this.name;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章