在本教程中,我們將學(xué)習(xí)Java中的枚舉。我們將在示例的幫助下學(xué)習(xí)創(chuàng)建和使用枚舉和枚舉類。
在Java中,枚舉是一種具有固定的可能值集的類型。我們使用enum關(guān)鍵字來(lái)聲明枚舉。例如,
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}在這里,我們創(chuàng)建了一個(gè)名為Size的枚舉。
花括號(hào)內(nèi)的值稱為枚舉值(常量)。這些是枚舉類型可以保留的唯一值。
注意:枚舉常量通常以大寫(xiě)形式表示。
讓我們舉一個(gè)簡(jiǎn)單的實(shí)例。
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
class Main {
public static void main(String[] args) {
System.out.println(Size.SMALL);
System.out.println(Size.MEDIUM);
}
}輸出結(jié)果
SMALL MEDIUM
從上面的示例可以看出,我們使用枚舉名稱訪問(wèn)常量值。
同樣,我們可以創(chuàng)建枚舉類型的變量。例如,
Size pizzaSize;
在這里,pizzaSize是Size類型的變量。它只能分配4個(gè)值。
pizzaSize = Size.SMALL; pizzaSize = Size.MEDIUM; pizzaSize = Size.LARGE; pizzaSize = Size.EXTRALARGE;
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
class Test {
Size pizzaSize;
public Test(Size pizzaSize) {
this.pizzaSize = pizzaSize;
}
public void orderPizza() {
switch(pizzaSize) {
case SMALL:
System.out.println("我點(diǎn)了一個(gè)小號(hào)比薩餅。");
break;
case MEDIUM:
System.out.println("我點(diǎn)了一個(gè)中號(hào)的披薩。");
break;
default:
System.out.println("我不知道該點(diǎn)哪一種。");
break;
}
}
}
class Main {
public static void main(String[] args) {
Test t1 = new Test(Size.MEDIUM);
t1.orderPizza();
}
}輸出結(jié)果
我點(diǎn)了一個(gè)中號(hào)的披薩。
在上面的程序中,我們創(chuàng)建了一個(gè)枚舉類型Size。然后,我們聲明Size類型的變量pizzaSize。
變量pizzaSize只能分配4個(gè)值(SMALL,MEDIUM,LARGE,EXTRALARGE)。
變量pizzaSize分配了MEDIUM常數(shù)。 基于此,將打印switch case語(yǔ)句的一種情況。
在Java中,枚舉類型被認(rèn)為是類的一種特殊類型。它是在Java 5發(fā)行版中引入的。
枚舉類可以像常規(guī)類一樣包含方法和字段。
enum Size {
constant1, constant2, …, constantN;
//方法和字段
}枚舉常量始終默認(rèn)為public static final。
當(dāng)創(chuàng)建enum類時(shí),編譯器還將創(chuàng)建每個(gè)enum常量的實(shí)例(對(duì)象)。
enum Size{
SMALL, MEDIUM, LARGE, EXTRALARGE;
public String getSize() {
//這將引用對(duì)象SMALL
switch(this) {
case SMALL:
return "small";
case MEDIUM:
return "medium";
case LARGE:
return "large";
case EXTRALARGE:
return "extra large";
default:
return null;
}
}
public static void main(String[] args) {
//使用對(duì)象SMALL調(diào)用方法getSize()
System.out.println("披薩的大小是 " + Size.SMALL.getSize());
}
}輸出結(jié)果
披薩的大小是 small
在上面的示例中,我們創(chuàng)建了一個(gè)枚舉類 Size。它有四個(gè)常數(shù) SMALL,MEDIUM,LARGE和EXTRALARGE。
由于Size是枚舉類,因此編譯器會(huì)自動(dòng)為每個(gè)枚舉常量創(chuàng)建實(shí)例。
在main()方法內(nèi)部,我們已使用實(shí)例SMALL調(diào)用getSize()方法。
像常規(guī)類一樣,枚舉類也可以包含構(gòu)造函數(shù)。要了解更多信息,請(qǐng)?jiān)L問(wèn)Java枚舉構(gòu)造函數(shù)。
枚舉類中有一些預(yù)定義的方法可以隨時(shí)使用。
ordinal()方法返回枚舉常量的位置。例如,
ordinal(SMALL) //返回 0
compareTo()方法根據(jù)序數(shù)值比較枚舉常量。例如,
Size.SMALL.compareTo(Size.MEDIUM) //返回 ordinal(SMALL) - ordinal(MEDIUM)
toString()方法返回枚舉常量的字符串表示形式。例如,
SMALL.toString() //返回 "SMALL"
name()方法以字符串形式返回枚舉常量的定義名稱。name()方法返回的值為final。例如,
name(SMALL) //返回 "SMALL"
valueOf()方法采用字符串,并返回具有相同字符串名稱的枚舉常量。例如,
Size.valueOf("SMALL")
//返回常量 SMALLvalues()方法返回包含所有枚舉常量的枚舉類型數(shù)組。例如,
Size[] enumArray = Size.value();
在Java中,引入了enum來(lái)代替int常量的使用。
假設(shè)我們使用了int常量集合。
class Size {
public final static int SMALL = 1;
public final static int MEDIUM = 2;
public final static int LARGE = 3;
public final static int EXTRALARGE = 4;
} 這里,如果我們打印常量,問(wèn)題就出現(xiàn)了。這是因?yàn)橹淮蛴?shù)字,這可能沒(méi)有幫助。
因此,我們可以簡(jiǎn)單地使用枚舉,代替使用int常量。例如,
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}這使我們的代碼更加直觀。
同樣,枚舉提供了編譯時(shí)類型的安全性。
如果我們聲明Size類型的變量(如上述示例中所示),則可以確保該變量將容納四個(gè)值之一。如果我們嘗試傳遞這四個(gè)值以外的值,則編譯器將拋出錯(cuò)誤。