av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

java語言

詳解Java枚舉類型enum及其使用

時間:2025-01-06 19:59:18 java語言 我要投稿
  • 相關(guān)推薦

詳解Java枚舉類型enum及其使用

  Java 中的枚舉類型采用關(guān)鍵字enum 來定義,從jdk1.5才有的新類型,所有的枚舉類型都是繼承自Enum 類型。以下是百分網(wǎng)小編搜索整理的關(guān)于Java枚舉類型enum詳解及其使用,,需要的朋友可以參考本文!想了解更多相關(guān)信息請持續(xù)關(guān)注我們應屆畢業(yè)生考試網(wǎng)!

  要了解枚舉類型,建議大家先打開jdk 中的Enum 類簡單讀一下,這個類里面定義了很多protected 方法,比如構(gòu)造函數(shù),如果要使用這些方法我們可以把枚舉類型定義到當前類中。每個枚舉類型,都有自己的名字和順序,當我們輸出一個枚舉類型的時候,會輸入枚舉類型的name ,具體可以參考下面的例子。

  一、通常定義常量方法

  我們通常利用public final static 方法定義的代碼如下,分別用1 表示紅燈,3 表示綠燈,2 表示黃燈。

  package com.csdn.myEnum;

  public class Light {

  /* 紅燈 */

  public final static int RED =1;

  /* 綠燈 */

  public final static int GREEN =3;

  /* 黃燈 */

  public final static int YELLOW =2;

  }

  二、枚舉類型定義常量方法

  枚舉類型的簡單定義方法如下,我們似乎沒辦法定義每個枚舉類型的值。比如我們定義紅燈、綠燈和黃燈的代碼可能如下:

  public enum Light {

  RED , GREEN , YELLOW ;

  }

  我們只能夠表示出紅燈、綠燈和黃燈,但是具體的值我們沒辦法表示出來。別急,既然枚舉類型提供了構(gòu)造函數(shù),我們可以通過構(gòu)造函數(shù)和覆寫toString 方法來實現(xiàn)。首先給Light 枚舉類型增加構(gòu)造方法,然后每個枚舉類型的值通過構(gòu)造函數(shù)傳入對應的參數(shù),同時覆寫toString 方法,在該方法中返回從構(gòu)造函數(shù)中傳入的參數(shù),改造后的代碼如下:

  public enum Light {

  // 利用構(gòu)造函數(shù)傳參

  RED (1), GREEN (3), YELLOW (2);

  // 定義私有變量

  private int nCode ;

  // 構(gòu)造函數(shù),枚舉類型只能為私有

  private Light( int _nCode) {

  this . nCode = _nCode;

  }

  @Override

  public String toString() {

  return String.valueOf ( this . nCode );

  }

  }

  三、完整示例代碼

  枚舉類型的完整演示代碼如下:

  package com.csdn.myEnum;

  import java.util.EnumMap;

  import java.util.EnumSet;

  public class LightTest {

  // 1. 定義枚舉類型

  public enum Light {

  // 利用構(gòu)造函數(shù)傳參

  RED (1), GREEN (3), YELLOW (2);

  // 定義私有變量

  private int nCode ;

  // 構(gòu)造函數(shù),枚舉類型只能為私有

  private Light( int _nCode) {

  this . nCode = _nCode;

  }

  @Override

  public String toString() {

  return String.valueOf ( this . nCode );

  }

  }

  /**

  * @param args

  */

  public static void main(String[] args ) {

  // 1. 遍歷枚舉類型

  System. out .println( " 演示枚舉類型的遍歷 ......" );

  testTraversalEnum ();

  // 2. 演示 EnumMap 對象的使用

  System. out .println( " 演示 EnmuMap 對象的使用和遍歷 ....." );

  testEnumMap ();

  // 3. 演示 EnmuSet 的使用

  System. out .println( " 演示 EnmuSet 對象的使用和遍歷 ....." );

  testEnumSet ();

  }

  /**

  * 演示枚舉類型的遍歷

  */

  private static void testTraversalEnum() {

  Light[] allLight = Light.values ();

  for (Light aLight : allLight) {

  System. out .println( " 當前燈 name : " + aLight.name());

  System. out .println( " 當前燈 ordinal : " + aLight.ordinal());

  System. out .println( " 當前燈: " + aLight);

  }

  }

  /**

  * 演示 EnumMap 的使用, EnumMap 跟 HashMap 的使用差不多,只不過 key 要是枚舉類型

  */

  private static void testEnumMap() {

  // 1. 演示定義 EnumMap 對象, EnumMap 對象的構(gòu)造函數(shù)需要參數(shù)傳入 , 默認是key 的類的類型

  EnumMap currEnumMap = new EnumMap(

  Light. class );

  currEnumMap.put(Light. RED , " 紅燈 " );

  currEnumMap.put(Light. GREEN , " 綠燈 " );

  currEnumMap.put(Light. YELLOW , " 黃燈 " );

  // 2. 遍歷對象

  for (Light aLight : Light.values ()) {

  System. out .println( "[key=" + aLight.name() + ",value="

  + currEnumMap.get(aLight) + "]" );

  }

  }

  /**

  * 演示 EnumSet 如何使用, EnumSet 是一個抽象類,獲取一個類型的枚舉類型內(nèi)容

  * 可以使用 allOf 方法

  */

  private static void testEnumSet() {

  EnumSet currEnumSet = EnumSet.allOf (Light. class );

  for (Light aLightSetElement : currEnumSet) {

  System. out .println( " 當前 EnumSet 中數(shù)據(jù)為: " + aLightSetElement);

  }

  }

  }

  執(zhí)行結(jié)果如下:

  演示枚舉類型的遍歷 ......

  當前燈 name : RED

  當前燈 ordinal : 0

  當前燈: 1

  當前燈 name : GREEN

  當前燈 ordinal : 1

  當前燈: 3

  當前燈 name : YELLOW

  當前燈 ordinal : 2

  當前燈: 2

  演示 EnmuMap 對象的使用和遍歷 .....

  [key=RED,value= 紅燈 ]

  [key=GREEN,value= 綠燈 ]

  [key=YELLOW,value= 黃燈 ]

  演示 EnmuSet 對象的使用和遍歷 .....

  當前 EnumSet 中數(shù)據(jù)為: 1

  當前 EnumSet 中數(shù)據(jù)為: 3

  當前 EnumSet 中數(shù)據(jù)為: 2

  四、通常定義常量方法和枚舉定義常量方法區(qū)別

  以下內(nèi)容可能有些無聊,但絕對值得一窺

  1. 代碼:

  public class State {

  public static final int ON = 1;

  public static final Int OFF= 0;

  }

  有什么不好了,大家都這樣用了很長時間了,沒什么問題啊。

  首先,它不是類型安全的。你必須確保是int

  其次,你還要確保它的范圍是0 和1

  最后,很多時候你打印出來的時候,你只看到 1 和0 ,

  但其沒有看到代碼的人并不知道你的企圖,拋棄你所有舊的public static final 常量吧

  2. 可以創(chuàng)建一個enum 類,把它看做一個普通的類。除了它不能繼承其他類了。(java 是單繼承,它已經(jīng)繼承了Enum),

  可以添加其他方法,覆蓋它本身的方法

  3. switch() 參數(shù)可以使用enum 了

  4. values() 方法是編譯器插入到enum 定義中的static 方法,所以,當你將enum 實例向上轉(zhuǎn)型為父類Enum是,values() 就不可訪問了。解決辦法:在Class 中有一個getEnumConstants() 方法,所以即便Enum 接口中沒有values() 方法,我們?nèi)匀豢梢酝ㄟ^Class 對象取得所有的enum 實例

  5. 無法從enum 繼承子類,如果需要擴展enum 中的元素,在一個接口的內(nèi)部,創(chuàng)建實現(xiàn)該接口的枚舉,以此將元素進行分組。達到將枚舉元素進行分組。

  6. 使用EnumSet 代替標志。enum 要求其成員都是唯一的,但是enum 中不能刪除添加元素。

  7. EnumMap 的key 是enum ,value 是任何其他Object 對象。

  8. enum 允許程序員為eunm 實例編寫方法。所以可以為每個enum 實例賦予各自不同的行為。

  9. 使用enum 的職責鏈(Chain of Responsibility) . 這個關(guān)系到設(shè)計模式的職責鏈模式。以多種不同的方法來解決一個問題。然后將他們鏈接在一起。當一個請求到來時,遍歷這個鏈,直到鏈中的某個解決方案能夠處理該請求。

  10. 使用enum 的狀態(tài)機

  11. 使用enum 多路分發(fā)


【詳解Java枚舉類型enum及其使用】相關(guān)文章:

使用Java的枚舉類型的方法10-19

Java/Android引用類型及其使用分析08-08

Java不可變類型的詳解09-10

Java內(nèi)存區(qū)域的使用詳解08-28

講述java中enum的用法10-14

C語言的枚舉類型知識07-22

Java基本數(shù)據(jù)類型詳解08-20

Java為什么要枚舉06-30

C語言的關(guān)鍵字enum的使用09-24