目錄
枚舉:
枚舉的定義:
枚舉的用法:
枚舉的運用場景:
枚舉的小示例:
從jdk5開始,java開始支援枚舉。
枚舉:
一組常量組織在一起,用花括号{}括起來,然後給它命名個類型,就是枚舉。
枚舉是類類型,隻不過不能用new操作符,可以為枚舉提供構造函數,添加資料/方法成員,甚至可以實作接口。
每個枚舉常量都是所屬枚舉類型的對象,是以,如果為枚舉提供了構造函數,那麼每個枚舉常量都會調用一次這個構造函數,并且每個枚舉常量都有其自己的執行個體資料成員。
所有的枚舉的超類都是java.lang.Enum類。enum關鍵字不過是個文法糖,其實真正的枚舉定義 enum MyEnum{}可以了解為 public class MyEnum extends java.lang.Enum{}
枚舉的定義:
enum Grade{ //枚舉類型Grade 無構造函數的
Perfect,Good,Common,Bad //擁有的四個常量,預設是public static final
}
enum Grade2{ //枚舉類型Grade2 有構造函數的
Perfect(),Good(),Common(),Bad();
private int score; //每種枚舉常量值的分數
Grade2( int score ){ //構造函數
this.score = score;
}
Grade2(){ } //構造函數
public int getScore(){
return score;
}
public void setScore(int score){
this.score = score;
}
}
枚舉的用法:
- 枚舉變量
Grade g = Grade.Perfect;//枚舉g的值隻能是枚舉常量中的某一個
- 枚舉的switch應用
switch(g){ //枚舉可以用在switch語句中
case Perfect:
case Good:
case Common:
System.out.println("考試及格!");
break;
case Bad:
System.out.println("考試不及格!");
break;
}
- 枚舉的方法
for ( Grade e : Grade.values() ) //枚舉的values()的方法,傳回枚舉中的所有要素
System.out.println(e);
System.out.println( Grade.Bad.ordinal()); //輸出枚舉值的下标索引,從0開始,這裡輸出3
System.out.println( Grade.Good.compareTo(Grade.Bad)); //計算兩個枚舉值的下标索引的內插補點
System.out.println( Grade.Good.equals(Grade.Bad)); //同枚舉類型下,比較兩個枚舉值是否相同
- 枚舉的構造函數
Grade2.Perfect.setScore(90); //有構造函數的枚舉:每個常量都是一個對象,都有自己的資料成員
System.out.println(Grade2.Perfect.getScore()); //輸出90
Grade2.Good.setScore(80);
System.out.println(Grade2.Good.getScore()); //輸出80
枚舉的運用場景:
枚舉是類類型,每一個枚舉元素都是對象。我們想限定有限個該類類型的對象,并且每個對象的資料和行為都是各司其意的(有點同一個接口不同實作類的味道,實作多态),這是用枚舉類型就很适合。
或者更簡單的對枚舉的一種認識:我們自己寫了個類,這個類裡面有資料成員,方法成員。不過我們不用new來執行個體化這個類,而是enum定義的時候,就定義好了幾個枚舉值常量,每個常量都是這個類的對象,而且是public static final修飾的對象。每個對象呢,就都有自己的資料成員私有副本,還可以實作出不同版本的方法成員。
- 單例模式
- 模闆
枚舉的小示例
點選學習枚舉小示例