深入理解java枚举_深入学习java枚举的应用
一.枚舉和靜態常量區別
講到枚舉我們首先思考,它和public static final String 修飾的常量有什么不同。
我舉枚舉的兩個優點:
1. 保證了類型安全:調用者無法隨意傳一個 int或者String 等值;
2.代碼可讀性非常高;
舉個例子:
在實際編程中,往往存在著這樣的“數據集”,它們的數值在程序中是穩定的,而且“數據集”中的元素是有限的。例如春夏秋冬四個數據元素組成了四季的“數據集”。
你寫了方法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),確實是把"春",放進去了,但是這個時候你會發現這里面有一個隱患,你get(String season),畢竟放入的是String類型的,如果新同事或者不知情的同事,不知道這個方法里只能放“春、夏、秋、冬”,它放了個其期它字符串比如get("小小“),這個時候,在編譯期它是不會報錯的,只有運行之后,才發現錯了。
為了防止上面的隱患,枚舉出現了
public enum Season {
SPRING("春"),
SUMMER("夏"),
AUTUMN("秋"),
WINTER("冬");
.....
}
這個時候,我們修改get方法的傳參,改成get(Season ??season) ? 這個時候加入get(Season.SPRING),這就能保證傳入的參數只能是這幾個。
二.理解枚舉
首要我們要明確,其實枚舉也是個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.上面對象里放了兩個參數,那下面就肯定要有這個類型的構造函數
* 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;
}
}
上面這個例子,就很好解釋了枚舉,它和普通類沒什么區別,只是用另一種寫法創建了幾個有屬性的對象,這也必須寫這樣有屬性的構造函數,僅此而已。
這里順便列舉下枚舉的一些特點:
1.它不能有public的構造函數,這樣做可以保證客戶代碼沒有辦法新建一個enum的實例。
2. ?枚舉不能在繼承其它類了,因為它默認繼承了java.lang.Enum
3. ?常量值地址唯一,可以用==直接對比,性能會有提高.
4.Enum還提供了values方法,這個方法使你能夠方便的遍歷所有的枚舉值。
5.Enum還有一個oridinal的方法,這個方法返回枚舉值在枚舉類種的順序,這個順序根據枚舉值聲明的順序而定。
三.枚舉的常見用法
第一種:switch運用
先建一個枚舉:
public enum Common {
INSERT,
MODIFY,
DELETE
}
//因為這里是無參的對象,所以可以用系統默認的構造函數。也不用寫屬性和方法。
在寫實現代碼
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枚举的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java对象复制到新对象_java –
- 下一篇: java注释日志打印_java 日志文件