Java基礎 -- 列舉enum
目錄
從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; //每種列舉常量值的分數
Grade( int score ){
this.score = score;
}
Grade(){ }
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修飾的物件。每個物件呢,就都有自己的資料成員私有副本,還可以實現出不同版本的方法成員。
- 單例模式
- 模板
列舉的小示例