最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入學(xué)習(xí)java枚舉的應(yīng)用

 更新時(shí)間:2018年01月24日 12:00:36   投稿:laozhang  
本篇是關(guān)于java深入提高學(xué)習(xí)的相關(guān)知識(shí),介紹了枚舉的應(yīng)用等方面內(nèi)容,有興趣的朋友參考學(xué)習(xí)下吧。

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

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

我舉枚舉的兩個(gè)優(yōu)點(diǎn):

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

2.代碼可讀性非常高;

舉個(gè)例子:

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

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

這個(gè)時(shí)候。你寫四個(gè)字符串常量

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),確實(shí)是把"春",放進(jìn)去了,但是這個(gè)時(shí)候你會(huì)發(fā)現(xiàn)這里面有一個(gè)隱患,你get(String season),畢竟放入的是String類型的,如果新同事或者不知情的同事,不知道這個(gè)方法里只能放“春、夏、秋、冬”,它放了個(gè)其期它字符串比如get("小小“),這個(gè)時(shí)候,在編譯期它是不會(huì)報(bào)錯(cuò)的,只有運(yùn)行之后,才發(fā)現(xiàn)錯(cuò)了。

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

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

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

二.理解枚舉

首要我們要明確,其實(shí)枚舉也是個(gè)class類,我寫個(gè)枚舉來理解。

//我們把枚舉當(dāng)做一個(gè)普通類
public enum Season {
  SPRING(1,"春"),
  SUMMER(2,"夏" ),
  AUTUMN(3,"秋" ),
  WINTER(4,"冬"); //這里最后一個(gè)一定要分號(hào),否則報(bào)錯(cuò)
  
  /*我們可以理解成
   *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,冬); 
   *既然是對(duì)象,那下面就很好理解了
   */  
  /*
   * 1.上面對(duì)象里放了兩個(gè)參數(shù),那下面就肯定要有這個(gè)類型的構(gòu)造函數(shù)
   * 2.這里是private,因?yàn)椴荒茉诒籲ew對(duì)象了
   */
  private Season(int code,String name) {
    this.name = name;
    this.code = code;
  }
  //對(duì)象的屬性
  private String name;
  private int code;
  //獲取對(duì)象屬性的方法
  public String getName() {
    return this.name;
  }
  public String getCode() {
    return this.name;
  }
  //通過code獲得對(duì)象,我們就可以獲得對(duì)象的其它屬性
  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;
  }
}

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

這里順便列舉下枚舉的一些特點(diǎn):

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

三.枚舉的常見用法

第一種:switch運(yùn)用

先建一個(gè)枚舉:

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

在寫實(shí)現(xiàn)代碼

public class CommonUtils {

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

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

枚舉類

public enum Season {
  SPRING(1,"春","春天放風(fēng)箏"),
  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;
  }

}

測(cè)試類

好了,就寫這么多,以后有需要會(huì)更深入了解。感謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 關(guān)于java自定義線程池的原理與實(shí)現(xiàn)

    關(guān)于java自定義線程池的原理與實(shí)現(xiàn)

    本文介紹了如何自定義線程池和阻塞隊(duì)列,包括阻塞隊(duì)列的實(shí)現(xiàn)方法,線程池的構(gòu)建以及拒絕策略的應(yīng)用,詳細(xì)闡述了線程池中任務(wù)的提交和執(zhí)行流程,以及如何處理任務(wù)超出隊(duì)列容量的情況
    2022-04-04
  • SpringMVC攔截器超詳細(xì)解讀

    SpringMVC攔截器超詳細(xì)解讀

    SpringMVC的處理器攔截器,類似于Servlet開發(fā)中的過濾器Filter,用于對(duì)處理器進(jìn)行預(yù)處理和后處理。?依賴于web框架,在實(shí)現(xiàn)上基于Java的反射機(jī)制,屬于面向切面編程(AOP)的一種運(yùn)用
    2022-07-07
  • Java中@RequiredArgsConstructor注解的基本用法

    Java中@RequiredArgsConstructor注解的基本用法

    這篇文章主要介紹了Java中@RequiredArgsConstructor注解的基本用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Java生成UUID的常用方式示例代碼

    Java生成UUID的常用方式示例代碼

    UUID保證對(duì)在同一時(shí)空中的所有機(jī)器都是唯一的,通常平臺(tái)會(huì)提供生成的API,按照開放軟件基金會(huì)(OSF)制定的標(biāo)準(zhǔn)計(jì)算,用到了以太網(wǎng)卡地址、納秒級(jí)時(shí)間、芯片ID碼和許多可能的數(shù)字,下面這篇文章主要給大家介紹了關(guān)于Java生成UUID的常用方式,需要的朋友可以參考下
    2023-05-05
  • 如何使用IDEA開發(fā)Spark SQL程序(一文搞懂)

    如何使用IDEA開發(fā)Spark SQL程序(一文搞懂)

    Spark SQL 是一個(gè)用來處理結(jié)構(gòu)化數(shù)據(jù)的spark組件。它提供了一個(gè)叫做DataFrames的可編程抽象數(shù)據(jù)模型,并且可被視為一個(gè)分布式的SQL查詢引擎。這篇文章主要介紹了如何使用IDEA開發(fā)Spark SQL程序(一文搞懂),需要的朋友可以參考下
    2021-08-08
  • Java網(wǎng)絡(luò)編程之IO模型阻塞與非阻塞簡要分析

    Java網(wǎng)絡(luò)編程之IO模型阻塞與非阻塞簡要分析

    這篇文章主要介紹Java網(wǎng)絡(luò)編程中的IO模型阻塞與非阻塞簡要分析,文中附有示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 解決SpringBoot application.yaml文件配置schema 無法執(zhí)行sql問題

    解決SpringBoot application.yaml文件配置schema 無法執(zhí)行sql問題

    這篇文章主要介紹了解決SpringBoot application.yaml文件配置schema 無法執(zhí)行sql問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java異常處理的12條軍規(guī)總結(jié)

    Java異常處理的12條軍規(guī)總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java異常處理的12條軍規(guī),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • spring boot+mybatis搭建一個(gè)后端restfull服務(wù)的實(shí)例詳解

    spring boot+mybatis搭建一個(gè)后端restfull服務(wù)的實(shí)例詳解

    這篇文章主要介紹了spring boot+mybatis搭建一個(gè)后端restfull服務(wù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java內(nèi)存模型(JMM)及happens-before原理

    Java內(nèi)存模型(JMM)及happens-before原理

    這篇文章主要介紹了java內(nèi)存模型(JMM)及happens-before原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論

藁城市| 嘉黎县| 叙永县| 同仁县| 宽甸| 九江县| 安新县| 鲁山县| 葵青区| 邹平县| 萨迦县| 和龙市| 乐亭县| 友谊县| 镇平县| 石城县| 垦利县| 从化市| 甘洛县| 昂仁县| 琼海市| 象州县| 江门市| 弋阳县| 翁源县| 石狮市| 江陵县| 宝丰县| 白山市| 公主岭市| 河间市| 伽师县| 大悟县| 微山县| 翼城县| 镇雄县| 乐至县| 南安市| 融水| 江安县| 平潭县|