概念
enum 的全稱為 enumeration包券, 是 JDK 1.5 中引入的新特性介袜。
在Java中痹兜,被 enum 關(guān)鍵字修飾的類型就是枚舉類型。形式如下:
enum Color { RED, GREEN, BLUE }
如果枚舉不添加任何方法益缎,枚舉值默認為從0開始的有序數(shù)值谜慌。以 Color 枚舉類型舉例,它的枚舉常量依次為RED:0莺奔,GREEN:1欣范,BLUE:2
枚舉的好處:可以將常量組織起來,統(tǒng)一進行管理令哟。
枚舉的典型應用場景:錯誤碼恼琼、狀態(tài)機等。
枚舉類型的本質(zhì)
盡管 enum 看起來像是一種新的數(shù)據(jù)類型屏富,事實上晴竞,enum是一種受限制的類,并且具有自己的方法狠半。
創(chuàng)建enum時噩死,編譯器會為你生成一個相關(guān)的類,這個類繼承自 java.lang.Enum神年。
java.lang.Enum類聲明
public abstract class Enum<E extends Enum<E>>
implements Comparable<E>, Serializable { ... }
枚舉的方法
在enum中已维,提供了一些基本方法:
values():返回enum實例的數(shù)組,而且該數(shù)組中的元素嚴格保持在enum中聲明時的順序已日。
name():返回實例名垛耳。
ordinal():返回實例聲明時的次序,從0開始。
gtDeclaringClass():返回實例所屬的enum類型堂鲜。
equals() :判斷是否為同一個對象栈雳。
可以使用 == 來比較enum實例。
此外泡嘴,java.lang.Enum實現(xiàn)了Comparable和 Serializable 接口甫恩,所以也提供 compareTo() 方法逆济。
例:展示enum的基本方法
public class EnumMethodDemo {
enum Color {RED, GREEN, BLUE;}
enum Size {BIG, MIDDLE, SMALL;}
public static void main(String args[]) {
System.out.println("=========== Print all Color ===========");
for (Color c : Color.values()) {
System.out.println(c + " ordinal: " + c.ordinal());
}
System.out.println("=========== Print all Size ===========");
for (Size s : Size.values()) {
System.out.println(s + " ordinal: " + s.ordinal());
}
Color green = Color.GREEN;
System.out.println("green name(): " + green.name());
System.out.println("green getDeclaringClass(): " + green.getDeclaringClass());
System.out.println("green hashCode(): " + green.hashCode());
System.out.println("green compareTo Color.GREEN: " + green.compareTo(Color.GREEN));
System.out.println("green equals Color.GREEN: " + green.equals(Color.GREEN));
System.out.println("green equals Size.MIDDLE: " + green.equals(Size.MIDDLE));
System.out.println("green equals 1: " + green.equals(1));
System.out.format("green == Color.BLUE: %b\n", green == Color.BLUE);
}
}
輸出
=========== Print all Color ===========
RED ordinal: 0
GREEN ordinal: 1
BLUE ordinal: 2
=========== Print all Size ===========
BIG ordinal: 0
MIDDLE ordinal: 1
SMALL ordinal: 2
green name(): GREEN
green getDeclaringClass(): class org.zp.javase.enumeration.EnumDemo$Color
green hashCode(): 460141958
green compareTo Color.GREEN: 0
green equals Color.GREEN: true
green equals Size.MIDDLE: false
green equals 1: false
green == Color.BLUE: false
枚舉的特性
枚舉的特性酌予,歸結(jié)起來就是一句話:
除了不能繼承,基本上可以將 enum 看做一個常規(guī)的類奖慌。
但是這句話需要拆分去理解抛虫,讓我們細細道來。