枚舉類型是JDK1.5引入的新類型,雖然現(xiàn)在都1.8+了,總結(jié)一下枚舉的類型,先看兩個簡單的例子
- 例子
public enum Color {
RED, GREEN, BLANK, YELLOW
}
public enum Color {
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變量
private String name;
private int index;
// 構(gòu)造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
其實(shí)enum申明定義的就是一個特殊的class汪诉,這些類都是Enum類的子類(java.lang.Enum<E>),代碼編譯之后谈秫,會把enum申明的類單獨(dú)編譯成一個.class的字節(jié)碼文件扒寄。
-
特征及其用法
枚舉類是一個不可被繼承的final 類,枚舉值都是靜態(tài)常量拟烫。
既然是一個類该编,那就應(yīng)該有構(gòu)造器,方法硕淑,數(shù)據(jù)域上渴,但是枚舉類有些特別,它的構(gòu)造方法必須是私有(private)的喜颁,構(gòu)造器只是在構(gòu)造枚舉值的時候被調(diào)用稠氮。- 繼承的Enum的方法
(1) ordinal()方法: 返回枚舉值在枚舉類種的順序。這個順序根據(jù)枚舉值聲明的順序而定半开。
- 繼承的Enum的方法
Color.RED.ordinal(); //返回結(jié)果:0
Color.BLUE.ordinal(); //返回結(jié)果:1
(2) compareTo()方法: Enum實(shí)現(xiàn)了java.lang.Comparable接口隔披,因此可以比較象與指定對象的順序。Enum中的compareTo返回的是兩個枚舉值的順序之差寂拆。當(dāng)然奢米,前提是兩個枚舉值必須屬于同一個枚舉類,否則會拋出ClassCastException()異常纠永。(具體可見源代碼)
Color.RED.compareTo(Color.BLUE); //返回結(jié)果 -1
(3) values()方法: 靜態(tài)方法鬓长,返回一個包含全部枚舉值的數(shù)組。
Color[] colors=Color.values();
for(Color c:colors){
System.out.print(c+",");
}//返回結(jié)果:RED,BLUE,BLACK YELLOW,GREEN,
(4) toString()方法: 返回枚舉常量的名稱尝江。
Color c=Color.RED;
System.out.println(c);//返回結(jié)果: RED
(5) valueOf()方法: 這個方法和toString方法是相對應(yīng)的涉波,返回帶指定名稱的指定枚舉類型的枚舉常量。
Color.valueOf("BLUE"); //返回結(jié)果: Color.BLUE
(6) equals()方法: 比較兩個枚舉類對象的引用。
public final boolean equals(Object other) {
return this==other;
}