国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

深入學習java枚舉的應用

2024-07-13 10:17:12
字體:
供稿:網(wǎng)友

一.枚舉和靜態(tài)常量區(qū)別

講到枚舉我們首先思考,它和public static final String 修飾的常量有什么不同。

我舉枚舉的兩個優(yōu)點:

1. 保證了類型安全:調(diào)用者無法隨意傳一個 int或者String 等值;

2.代碼可讀性非常高;

舉個例子:

在實際編程中,往往存在著這樣的“數(shù)據(jù)集”,它們的數(shù)值在程序中是穩(wěn)定的,而且“數(shù)據(jù)集”中的元素是有限的。例如春夏秋冬四個數(shù)據(jù)元素組成了四季的“數(shù)據(jù)集”。

你寫了方法get(String season),輸入的類型只能是String類型,同時要String只能是(春、夏。秋。冬)。

這個時候。你寫四個字符串常量

public class Common {  public static final String SPRING="春";  public static final String SEASON="夏";  public static final String SUMMER="秋";  public static final String AUTUMN="冬";}

在get方法里放入get(Common.SEASON),確實是把"春",放進去了,但是這個時候你會發(fā)現(xiàn)這里面有一個隱患,你get(String season),畢竟放入的是String類型的,如果新同事或者不知情的同事,不知道這個方法里只能放“春、夏、秋、冬”,它放了個其期它字符串比如get("小小“),這個時候,在編譯期它是不會報錯的,只有運行之后,才發(fā)現(xiàn)錯了。

為了防止上面的隱患,枚舉出現(xiàn)了

  public enum Season {    SPRING("春"),    SUMMER("夏"),    AUTUMN("秋"),    WINTER("冬");  .....}

這個時候,我們修改get方法的傳參,改成get(Season   season)   這個時候加入get(Season.SPRING),這就能保證傳入的參數(shù)只能是這幾個。

二.理解枚舉

首要我們要明確,其實枚舉也是個class類,我寫個枚舉來理解。

//我們把枚舉當做一個普通類public enum Season {  SPRING(1,"春"),  SUMMER(2,"夏" ),  AUTUMN(3,"秋" ),  WINTER(4,"冬"); //這里最后一個一定要分號,否則報錯    /*我們可以理解成   *public static final Season SPRING = new Season(1,春);    *public static final Season SUMMER = new Season(2,夏);    *public static final Season AUTUMN = new Season(3,秋);    *public static final Season WINTER = new Season(4,冬);    *既然是對象,那下面就很好理解了   */    /*   * 1.上面對象里放了兩個參數(shù),那下面就肯定要有這個類型的構(gòu)造函數(shù)   * 2.這里是private,因為不能在被new對象了   */  private Season(int code,String name) {    this.name = name;    this.code = code;  }  //對象的屬性  private String name;  private int code;  //獲取對象屬性的方法  public String getName() {    return this.name;  }  public String getCode() {    return this.name;  }  //通過code獲得對象,我們就可以獲得對象的其它屬性  public static Season decode(int code) {    Season season = null;    for (Season type : Season.values()) {      if (type.code==code) {        season = type;        break;      }    }    return season;  }  //重新toString方法  public String toString() {    return this.name;  }}

上面這個例子,就很好解釋了枚舉,它和普通類沒什么區(qū)別,只是用另一種寫法創(chuàng)建了幾個有屬性的對象,這也必須寫這樣有屬性的構(gòu)造函數(shù),僅此而已。

這里順便列舉下枚舉的一些特點:

1.它不能有public的構(gòu)造函數(shù),這樣做可以保證客戶代碼沒有辦法新建一個enum的實例。 
2.  枚舉不能在繼承其它類了,因為它默認繼承了java.lang.Enum 
3.  常量值地址唯一,可以用==直接對比,性能會有提高. 
4.Enum還提供了values方法,這個方法使你能夠方便的遍歷所有的枚舉值。 
5.Enum還有一個oridinal的方法,這個方法返回枚舉值在枚舉類種的順序,這個順序根據(jù)枚舉值聲明的順序而定。

三.枚舉的常見用法

第一種:switch運用

先建一個枚舉:

public enum Common {  INSERT,  MODIFY,  DELETE}//因為這里是無參的對象,所以可以用系統(tǒng)默認的構(gòu)造函數(shù)。也不用寫屬性和方法。

在寫實現(xiàn)代碼

public class CommonUtils {  public static void getType(Common common){    Common c=common;    switch(c)    {    case INSERT:      System.out.println("進行插入操作");      break;    case MODIFY:      System.out.println("進行修改操作");      break;    case DELETE:      System.out.println("進行刪除操作");      break;    }        }  public static void main(String[] args) {    getType(Common.DELETE); //后臺輸出:進行刪除操作  }}

第二種用法,通過key值獲得value值獲取其它值

枚舉類

public enum Season {  SPRING(1,"春","春天放風箏"),  SUMMER(2,"夏","夏天去游泳"),  AUTUMN(3,"秋","秋天去秋游"),  WINTER(4,"冬","冬天吃火鍋");     private Season(int code,String name,String bz) {    this.code = code;    this.name = name;    this.bz=bz;  }  private int code;  private String name;  private String bz;  public static Season decode(int code) {    Season season = null;    for (Season type : Season.values()) {      if (type.code==code) {        season = type;        break;      }    }    return season;  }  public int getCode() {    return code;  }  public String getName() {    return name;  }  public String getBz() {    return bz;  }}

測試類

java,枚舉,應用

好了,就寫這么多,以后有需要會更深入了解。感謝大家對VeVb武林網(wǎng)的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新和县| 舞钢市| 承德县| 贺州市| 开平市| 项城市| 闸北区| 清原| 韶山市| 苗栗市| 共和县| 长寿区| 庆城县| 射阳县| 增城市| 上虞市| 成武县| 从化市| 南宁市| 濉溪县| 灯塔市| 布拖县| 开远市| 儋州市| 河南省| 从江县| 洞口县| 楚雄市| 托克托县| 黔南| 五河县| 巧家县| 无极县| 五台县| 乌兰察布市| 阳西县| 周至县| 金乡县| 长春市| 台江县| 边坝县|