天天看點

Java基礎 -- 07枚舉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; //每種枚舉常量值的分數

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

  • 單例模式
  • 模闆

枚舉的小示例

點選學習枚舉小示例