文章目錄
一、什麼是枚舉類
1.概念
枚舉的意思就是一個一個的列舉出來。
而枚舉類就是起到了把對象一個一個列舉出來的作用,枚舉類是java5中提出的新概念,但是到現在也有很多人不懂這個枚舉類,這些人也包括我,以下是我對枚舉類的學習總結。
2.爲什麼會有枚舉類
枚舉類出現之前
列舉對象一般都是使用static和final來實現的
package model;
public class Person{
public static final Person a=new Person("a");
public static final Person b=new Person("b");
private String name;
private Person(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
如果每次列舉一個對象都要去創建一個staticfinal對象,這就很麻煩,所以枚舉類就誕生了。
枚舉類出現之後
package model;
/**
* @author xxj
* 枚舉類
*/
public enum EnumPerson {
A("A"),B("B");
private String name;
EnumPerson(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
使用枚舉類就不用再去一個個地敲static final了。
3.什麼地方需要使用枚舉類
- 在需要列舉一下固定的對象。
- 單例模式也可以使用。
4.使用枚舉類的優缺點
優點
- 創建對象方便。省去了創建對象的代碼,這些都已經是規定好的了。
- 便於管理。全部靜態對象都在枚舉類中,直接在枚舉類裏修改即可。
缺點
- 需要有語法基礎。
- 初始化緩慢。靜態區的數據是在類加載的時候,就會去創建的。
二、枚舉類的使用
1.語法
- 需要將class換成enum。
- 枚舉類的成員不能使用修飾符。
- 枚舉類的成員後面可以直接接構造方法的參數。
- 枚舉類的構造方法不能是public。
- 枚舉類不能繼承和被繼承,但是可以實現接口。
2.代碼
這就直接看上面的,枚舉類出現之後的代碼了。
三、枚舉類的實現
1.原理
其實,枚舉類跟普通的類是沒有任何區別的,只不過編譯器會自動地識別enum這個標識符,然後把它轉換成一個class
2.枚舉類的字節碼
讓我們看一下,我們剛剛編寫的枚舉類的字節碼是怎麼樣的
public final enum model/EnumPerson extends java/lang/Enum {
// compiled from: EnumPerson.java
// access flags 0x4019
public final static enum Lmodel/EnumPerson; A
// access flags 0x4019
public final static enum Lmodel/EnumPerson; B
通過idea的view->show bytecode就可以看到了
我這裏就只截取了開頭的一部分內容,可以看出這裏默認繼承了一個Enum類,而且還有final標識符,這就是爲什麼枚舉類不能繼承和被繼承的原因了。
而我們創建的兩個對象就自動改成了public final static···一長串標識符聲明的對象,這不就跟在沒有出現枚舉類之前的代碼差不多嘛。
四、總結
枚舉類本質上和普通的class一樣,只不過java幫我們做了封裝。(跟語法糖的概念差不多)而,枚舉類中的對象都是枚舉類的實現。
在需要一開始就創建而且不會再改變的一系列對象時,就可以使用枚舉類。
語法:
- 需要將class換成enum。
- 枚舉類的成員不能使用修飾符。
- 枚舉類的成員後面可以直接接構造方法的參數。
- 枚舉類的構造方法不能是public。
- 枚舉類不能繼承和被繼承,但是可以實現接口。
——————————————————————————————
如果本文章內容有問題,請直接評論或者私信我。