激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 深入談?wù)刯ava的枚舉(enum)類型

深入談?wù)刯ava的枚舉(enum)類型

2020-06-10 11:18daisy JAVA教程

這篇文章介紹的是java中的枚舉類型,對于枚舉類型的相關(guān)知識,我們也介紹過不少方面的內(nèi)容。希望本文能夠給你帶來幫助,下面來一起看看,有需要的可以參考借鑒。

前言

在大家日常編程中,往往存在著這樣的“數(shù)據(jù)集”,它們的數(shù)值在程序中是穩(wěn)定的,而且“數(shù)據(jù)集”中的元素是有限的。例如星期一到星期日七個數(shù)據(jù)元素組成了一周的“數(shù)據(jù)集”,春夏秋冬四個數(shù)據(jù)元素組成了四季的“數(shù)據(jù)集”。在java中如何更好的使用這些“數(shù)據(jù)集”呢?因此枚舉便派上了用場

枚舉其實就是一種類型,跟int, char 這種差不多,就是定義變量時限制輸入的,你只能夠賦enum里面規(guī)定的值。

枚舉(enum)實現(xiàn)

JDK5中提供了Java枚舉類型的實現(xiàn),與其說是一種新類型,倒不如說是一種語法糖。

?
1
2
3
4
5
6
public enum Season {
 SPRING,
 SUMMER,
 AUTUMN,
 WINTER
}

通過反編譯工具來看看這段代碼是如何實現(xiàn)的,反編譯后的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public final class Season extends Enum {
 
 public static Season[] values() {
  return (Season[])$VALUES.clone();
 }
 
 public static Season valueOf(String s) {
  return (Season)Enum.valueOf(Season, s);
 }
 
 private Season(String s, int i) {
  super(s, i);
 }
 
 public static final Season SPRING;
 public static final Season SUMMER;
 public static final Season AUTUMN;
 public static final Season WINTER;
 private static final Season $VALUES[];
 
 static {
  SPRING = new Season("SPRING", 0);
  SUMMER = new Season("SUMMER", 1);
  AUTUMN = new Season("AUTUMN", 2);
  WINTER = new Season("WINTER", 3);
  $VALUES = (new Season[] {
   SPRING, SUMMER, AUTUMN, WINTER
  });
 }
}

通過反編譯的代碼可以發(fā)現(xiàn):

1、Season是一個普通的類,繼承自Enum,并通過final關(guān)鍵字修飾,避免被繼承,

2、枚舉中的SPRINGSUMMERAUTUMNWINTERSeason類的靜態(tài)實例,并在類構(gòu)造器<clinit>方法中進行初始化。

3、values()方法返回私有變量$VALUES[]的副本,$VALUES[]也是在<clinit>方法中進行初始化。

如何使用枚舉(enum)

1、單例模式

我們已經(jīng)知道類構(gòu)造器<clinit>只能被一個線程在類加載的初始化階段進行執(zhí)行,所以枚舉的每個實例在Java堆中有且只有一個副本,這種特性讓枚舉很容易就實現(xiàn)了單例模式,這也正是Effective Java作者 Josh Bloch 提倡使用實現(xiàn)單利模式的方式。

?
1
public enum Singleton { INSTANCE;}

2、在switch中使用

3、自定義字段和方法

枚舉(enum)中除了默認(rèn)字段和方法之外,可以針對業(yè)務(wù)邏輯進行自定義。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public enum EnumTest {
 PLUS("+") {
  @Override
  public int bind(int arg1, int arg2) {
   return arg1 + arg2;
  }
 },
 SUB("-") {
  @Override
  public int bind(int arg1, int arg2) {
   return arg1 - arg2;
  }
 };
 
 final String operation;
 
 EnumTest(String operation) {
  this.operation = operation;
 }
 
 abstract int bind(int arg1, int arg2);
}

4、實現(xiàn)接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
interface Operation{
 int operate(int arg1, int arg2);
}
 
public enum EnumTest implements Operation {
 
 PLUS("+") {
  @Override
  public int operate(int arg1, int arg2) {
   return arg1 + arg2;
  }
 },
 SUB("-") {
  @Override
  public int operate(int arg1, int arg2) {
   return arg1 - arg2;
  }
 };
 
 final String operation;
 
 EnumTest(String operation) {
  this.operation = operation;
 }
}

在實際應(yīng)用中,可以把 "+"、"-" 作為key,PLUS和SUB作為value,預(yù)先保存在hashMap中,具體使用方式如下:

?
1
2
Operation operation = hashMap.get("+");
int result = operation.bind(1, 2);

總結(jié)

以上就是關(guān)于Java中枚舉類型的全部內(nèi)容了,希望通過本文對java中枚舉的介紹,能夠給大家?guī)韼椭H绻幸蓡柎蠹铱梢粤粞越涣鳌?/p>

延伸 · 閱讀

精彩推薦
  • JAVA教程解析Java繼承中方法的覆蓋和重載

    解析Java繼承中方法的覆蓋和重載

    這篇文章主要介紹了Java繼承中方法的覆蓋和重載的詳細(xì)概念及用法,非常的實用,這里推薦給大家,有需要的小伙伴可以參考下。 ...

    hebedich2972019-12-17
  • JAVA教程淺談Java編程中的單例設(shè)計模式

    淺談Java編程中的單例設(shè)計模式

    這篇文章主要介紹了Java編程中的單例設(shè)計模式,在許多語言的編程過程當(dāng)中單例模式都被開發(fā)者們廣泛采用,需要的朋友可以參考下 ...

    zinss269143882019-12-31
  • JAVA教程Windows下apache ant安裝、環(huán)境變量配置教程

    Windows下apache ant安裝、環(huán)境變量配置教程

    這篇文章主要介紹了Windows下apache ant安裝、環(huán)境變量配置教程,ANT的安裝很簡單,本文同時講解了驗證安裝是否成功的方法和使用方法實例,需要的朋友可以參...

    junjie3492019-12-20
  • JAVA教程Javaweb開發(fā)中通過Servlet生成驗證碼圖片

    Javaweb開發(fā)中通過Servlet生成驗證碼圖片

    這篇文章主要為大家詳細(xì)介紹了Javaweb開發(fā)中通過Servlet生成驗證碼圖片的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴...

    孫赫奕3502020-04-29
  • JAVA教程JAVA基礎(chǔ)之基本數(shù)據(jù)類型全面解析

    JAVA基礎(chǔ)之基本數(shù)據(jù)類型全面解析

    下面小編就為大家?guī)硪黄狫AVA基礎(chǔ)之基本數(shù)據(jù)類型全面解析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    java教程網(wǎng)1272020-05-23
  • JAVA教程Java9的一些新特性介紹

    Java9的一些新特性介紹

    這篇文章主要介紹了Java9的一些新特性介紹,Java隨著其開源的特點和甲骨文的推動正在不斷改進中,需要的朋友可以參考下 ...

    goldensun1742019-12-25
  • JAVA教程Java實現(xiàn)發(fā)送郵件功能時碰到的坑

    Java實現(xiàn)發(fā)送郵件功能時碰到的坑

    之前用163郵箱發(fā)郵件時明明是成功的,但是使用中國移動自己的郵箱時,無論如何在linux服務(wù)器中都發(fā)送不成功。下面小編給大家說下我是怎么解決的,一...

    夢筆生金2792020-05-17
  • JAVA教程java_object的簡單使用詳解

    java_object的簡單使用詳解

    下面小編就為大家?guī)硪黄猨ava_object的簡單使用詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian3862020-05-16
主站蜘蛛池模板: 鲁丝一区二区二区四区 | 日本在线免费观看视频 | 黄色片网站在线看 | 国产一级毛片网站 | 国产精品一区2区3区 | 亚洲免费看片网站 | 国产91小视频在线观看 | 看片一区| 99爱福利视频在线观看 | 精品国产乱码一区二区 | 久久久www成人免费毛片 | 国产精品久久久av | 国产精品一区二区三区在线播放 | 他也色在线视频 | 欧美在线观看视频网站 | 羞羞答答影院 | 国产精品一区二区三区在线看 | 天天夜干| 国产高潮国产高潮久久久91 | 成人一级毛片 | 一级免费在线视频 | videos高潮 | 国产成人精品区 | 欧美精品电影一区 | 国产精品一二三区在线观看 | 欧美黑大粗硬毛片视频 | 2021国产精品视频 | 中国产一级毛片 | av在线一区二区三区四区 | 亚洲小视频在线播放 | 免费黄色欧美视频 | 手机黄色小视频 | 一区二区久久久久草草 | 亚洲免费视频大全 | 一区二区三区在线观看免费视频 | 小视频免费在线观看 | 久久免费视频3 | 中文亚洲视频 | 免费观看视频网站 | 色视频在线播放 | 久久久久久亚洲综合影院红桃 |