1. 程式人生 > >Java那點兒事——列舉

Java那點兒事——列舉

在Java5之後,列舉被加入到了Java中,但是有你是否知道到底列舉能幹什麼呢?
下面的例子
public class A{
enum mode{ON,OFF};
enum mode2{ON,OFF}
// ......
}

這兩句有和區別呢? 少了個分號麼? 錯了吧?
我要說確實少了一個分號,但是沒有錯,他是能通過編譯的。怎麼回事呢?
其實很多情況下這樣的分號都可以在java 中出現比如

public class B{
public class inner{
}; //<--這裡的分號

static{
}; //<--這裡的分號

enum enums{A,B,C}; //<--這裡的分號

public static void main(String[] args){
for(enums e:enums.values()){
System.out.println(e);
}; //<--這裡的分號
}; //<--這裡的分號
}; //<--這裡的分號


在java中{}表示語句塊,那麼在語句塊後的分號,表示什麼? 表示空語句啊!
如果你認為列舉就是上面這個用法,呵呵呵呵。那java就沒必要加入這玩意兒了。

列舉是一種類,官方成之為"常量特定類體"(constant specific class body),列舉可以被例項化,也能在內部存在構造方法、例項變數和一般方法。
列舉可以被宣告為成員,也可以被宣告在一個單獨的檔案中,也可以宣告在類外。但是列舉不能在方法中宣告,這一點與類不用類(class)不同,class是可以在方法中宣告的。還有就是永遠也不能直接呼叫其建構函式。

public enum Phone{
// 列舉成員的定義應為列舉的第1句;系統會自動呼叫構造方法。
HERO("hero",2800),MILESTORE("milestore",2400),NEXUSONE("nexus_one",5100);

private String name; //列舉中的例項變數
private int price;

Phone(String name,int price){ //列舉的構造方法 注意列舉的構造方法不能是public
this.name = name;
this.price = price;
}

public void print(){
System.out.print("name"+name);
System.out.println(" price"+price);
}
}


public class Test{
public static void printPhone(Phone p){ //列舉可以作為引數
p.print(); //呼叫列舉中的方法
}
public static void main(String[] args){
Phone phone = Phone.MILESTORE; //列舉可以被例項化
printPhone(phone);
}
}


這還是列舉麼?沒錯這就是Java5中所新增的列舉,而且列舉可以使用在for each迴圈中( 呼叫values()方法)。就簡單說這麼多了,再介紹一種用法,請自己去琢磨去吧。

enum CoffeeSize{
BIG(8),HUGE(10),OVERWHELMING(16){
public String getLidCode(){
return "A";
}
};

private int ounces;

CoffeeSize(int o){
ounces = o;
}

public int getOunces(){
return ounces
};
public String getLidCode(){
return "B";
}
}