1. 程式人生 > >Java基礎 -- 列舉enum

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修飾的物件。每個物件呢,就都有自己的資料成員私有副本,還可以實現出不同版本的方法成員。

  • 單例模式
  • 模板

列舉的小示例

點選學習列舉小示例