出處:
1、為什麼要出現列舉:
在現實生活中,有許多實體有且僅有特定的幾個屬性
(例如:月份只有1~12月,性別只有男女,季節只有四季……等)
若將其型別定義成常量,則不可避免地出現非法引數的問題
(例如:13月,第三個性別,第五個季節……等)
因此,對於上述型別的物件,必須規定其特定的屬性值為列舉型別,即:僅能從已有的幾個值中挑選,不可以自己建立新的屬性值
2、列舉的關鍵概念:
使用者若想要建立某個物件
則 只能從已有的該型別物件裡面
挑選 而 不能自己
自由建立
新的該型別物件
例如:使用者若想要乙個季節型別的物件
則只能從已有的春夏秋冬四個型別的物件裡挑選
而不能建立新的季節型別物件
*列舉類的原始實現:
(1)定義乙個類,裡面包含若干個public static final修飾的,自身型別的變數以供外界使用
(2)構造方法私有(即:不可以由外界建立新的物件)
例如:class season() }
*這樣,外界只要把乙個變數定義成season類
那麼這個變數除了取春夏秋冬中任乙個值外,不能取任何其它值
3、列舉類在jdk5.0中的實現:
enum season()
此語法與上述原始實現的作用完全等同,且同樣是
編譯器語法,即:
編譯器在遇到上述語句的時候,會自動將其轉換成之前原始實現的格式
*因此,列舉在本質上仍然是乙個特殊的類,只不過這個類:
(1)內部包含該類的公開靜態常量物件
(2)構造方法必須是私有的
4、列舉類的父類:enum
常用方法:
values() //靜態方法,返回該列舉類的陣列,內容為該類中所有的列舉值
5、列舉類作為乙個特殊的類的理解:
列舉除了可以定義該類的公開靜態常量物件之外
還可以定義任何另外的屬性和方法,
只是在新增屬性和方法的時候,需要
在列舉值的最後乙個值後面加上分號
例如:enum season()
// 注意:列舉類的構造方法僅能是private的,即使不用private修飾,也會自動預設為private
public string getname()
}6、列舉類不可以有子類,但是列舉類中的列舉值可以實現列舉類中的抽象方法
例如://定義列舉型別
enum operator
},sub },
mul },
div };
public abstract double calculate(double a, double b);
}//呼叫該列舉類
operator os = operator.values();
for(operator o:os)
Java之列舉型別
用乙個例子來說明 在程式中規定交通燈的取值只能是 red,green,yellow 取其他值就會報錯,並且還能根據當前顏色知道下個顏色.怎麼實現?一 用普通類來實現 public abstract class trafficlamp 取得下個燈 public abstract trafficlamp...
java基礎之列舉
讓某個型別的變數的值只能取若干個值中的乙個,否則,編譯器報錯。將原先執行時才能發現的問題提前到編譯時揭露。也是jdk1.5新特性 實現原理 1 將建構函式私有化,使其他人無法建立物件 2 定義預定數量的物件,並用public 和final static修飾,供使用者呼叫 3 可以有若干具體或抽象方法...
Java基礎之列舉
列舉 列舉enum 列舉就是要讓某個型別的變數的取值,只能為若干個固定值中的乙個,否則,編譯器報錯 列舉可以讓編譯器在編譯時就可以控制源程式中填寫的非法值,普通變數的方式在開發階段無法實現這一目標。列舉是一種特殊的類,列舉中的每乙個元素都是乙個例項物件 用普通類如何實現列舉功能,定義乙個weekda...