日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入理解java枚举_深入学习java枚举的应用

發(fā)布時間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解java枚举_深入学习java枚举的应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

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

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

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

2.代碼可讀性非常高;

舉個例子:

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

你寫了方法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ù),那下面就肯定要有這個類型的構造函數(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)建了幾個有屬性的對象,這也必須寫這樣有屬性的構造函數(shù),僅此而已。

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

1.它不能有public的構造函數(shù),這樣做可以保證客戶代碼沒有辦法新建一個enum的實例。

2. ?枚舉不能在繼承其它類了,因為它默認繼承了java.lang.Enum

3. ?常量值地址唯一,可以用==直接對比,性能會有提高.

4.Enum還提供了values方法,這個方法使你能夠方便的遍歷所有的枚舉值。

5.Enum還有一個oridinal的方法,這個方法返回枚舉值在枚舉類種的順序,這個順序根據枚舉值聲明的順序而定。

三.枚舉的常見用法

第一種:switch運用

先建一個枚舉:

public enum Common {

INSERT,

MODIFY,

DELETE

}

//因為這里是無參的對象,所以可以用系統(tǒng)默認的構造函數(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枚举_深入学习java枚举的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。