国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JAVA教程 - 深入談談java的枚舉(enum)類型

深入談談java的枚舉(enum)類型

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

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

前言

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

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

枚舉(enum)實現

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

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

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

?
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
  });
 }
}

通過反編譯的代碼可以發現:

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

2、枚舉中的SPRING、SUMMER、AUTUMNWINTERSeason類的靜態實例,并在類構造器<clinit>方法中進行初始化。

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

如何使用枚舉(enum)

1、單例模式

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

?
1
public enum Singleton { INSTANCE;}

2、在switch中使用

3、自定義字段和方法

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

?
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、實現接口

?
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;
 }
}

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

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

總結

以上就是關于Java中枚舉類型的全部內容了,希望通過本文對java中枚舉的介紹,能夠給大家帶來幫助。如果有疑問大家可以留言交流。

延伸 · 閱讀

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

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

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

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

    淺談Java編程中的單例設計模式

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

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

    Windows下apache ant安裝、環境變量配置教程

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

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

    Javaweb開發中通過Servlet生成驗證碼圖片

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

    孫赫奕3502020-04-29
  • JAVA教程JAVA基礎之基本數據類型全面解析

    JAVA基礎之基本數據類型全面解析

    下面小編就為大家帶來一篇JAVA基礎之基本數據類型全面解析。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    java教程網1272020-05-23
  • JAVA教程Java9的一些新特性介紹

    Java9的一些新特性介紹

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

    goldensun1742019-12-25
  • JAVA教程Java實現發送郵件功能時碰到的坑

    Java實現發送郵件功能時碰到的坑

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

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

    java_object的簡單使用詳解

    下面小編就為大家帶來一篇java_object的簡單使用詳解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian3862020-05-16
主站蜘蛛池模板: 久久国产精品久久久久久电车 | 一区在线视频 | 午夜视频在线观看免费视频 | 日韩国产精品一区二区 | 亚洲欧美日韩另类精品一区二区三区 | 久久久久久国产一级毛片高清版 | 欧美一区不卡 | 91国自产精品中文字幕亚洲 | 天天操人人干 | 国产一区二区三区在线免费观看 | 国产一区| 日本一区二区精品 | 国产精品极品美女在线观看免费 | 99久久免费看视频 | www.色小妹.com | 欧美精品久久久久 | 国产成人精品一区二区三区视频 | 亚洲午夜精品久久久久久高潮 | 欧美啪啪一区二区 | 国产成人精品免费 | 欧美日韩精品一区 | 日操| 亚洲免费精品 | 国产一区二区三区在线免费 | 精品综合久久 | 久久久亚洲精品中文字幕 | 亚洲国产成人精品女 | 中文字幕一区二区三区日韩精品 | 亚洲免费在线视频 | 99精品视频在线免费观看 | 91免费影视| 一区二区三区高清 | 日韩在线视频观看 | 精品福利一区二区三区 | 成人午夜网 | 亚洲国产精品成人精品 | 日本视频网 | 午夜视频 | 毛片在线观看网站 | 在线电影亚洲 | 欧美精品免费在线 |