枚舉類型
1、概述,JDK1.5增加了枚舉類型,可以使用enum來定義eg:
public enum Gender{ MALE,FEMALE; } 其中每一個枚舉元素都是該枚舉類型的一個執行個體,使用和遍曆
Gender gender = Gender.MALE; //使用 for(Gender s : Gender.values()) {//遍曆 System.out.println(s); } 2、Enum類和enum關鍵字的區別
1.使用enum關鍵字定義的枚舉類型,實際上就相當於定義了一個類,此類繼承了java.lang.Enum類
2.每一個枚舉值都是一個枚舉類型的執行個體,它們被預設為public static final
Enum類只有一個受保護的構造方法
protectd Enum(String name,int ordinal)
ordinal: 枚舉元素的編號
實際上對於每一個枚舉元素一旦聲明之後,就表示自動調用此構造方法,所有的編號採用自動編號的方式進行(編號從 0開始);
使用valueOf()方法,通過枚舉類可以找到枚舉中一個指定的對象
public enum Color{ RED,BLUE; }3、獲得枚舉類型對象的兩種方式:
第一種方式:
String s = "RED"; Color red = Color.valueOf(s);
第二種方式:
Color red = Color.RED;
第一種方式是通過一個字串的值來獲得 對象的,只要我們改變字串的值就隨意改變要獲得的對象.
第二種方式就是寫死的代碼,不管怎麼執行都是拿到枚舉類中 RED對象,永遠都是這樣。
4、枚舉類型的屬性和方法
枚舉類型可以有屬性和方法
規則如下:
屬性和方法必須定義在元素列表聲明之後
public enum Color{ RED,BLUE; private String name; public String getName(){ return this.name; } }5、枚舉類型中定義構造方法
1.枚舉的構造方法只能定義在元素列表之後
2.枚舉類型的構造方法只能是
private的,不寫預設也是private
3.元素如果需要調用有參構造方法,則在元素後面加上"(參數)"
解釋:Color類型只有三個固定對象,分別為RED GREEN BLUE,並且這個三個對象在建立的時候分別調用了有參的和無參的構造器
eg:
public enum Color { RED("紅色"),GREEN("綠色"),BLUE; private String name; public String getName(){ return this.name; } //一個參數構造器 Color(String name){ this.name = name; } //無參構造器 private Color(){ } } main:
//拿到Color中的三個固定對象的其中一個
Color c = Color.RED;
//拿到RED對象中的name屬性的值
//這個值列印出來會是 "紅色"
//因為是RED這個對象才建立的時候
//通過一個參數的構造器傳給屬性name的
//在枚舉類型中聲明元素列表其實就是
//在建立這個枚舉類型的固定對象
String name = c.getName();
枚舉隱式繼承於Enum因此,無法再繼承其他類
6、枚舉實現介面
枚舉可以實現介面,有以下兩種方式
1.與普通class類一樣,在枚舉類中實現介面一樣
2.枚舉中單獨實現介面中的抽象方法或者各個枚舉元素對象中分別實現這個介面中的抽象方法
public interface Sofa{ void sit(); } 第一種方式來實現介面
public enum Color implements Sofa{ RED("紅色"),GREEN("綠色"),BLUE; private String name; public String getName(){ return this.name; } //一個參數構造器 Color(String name){ this.name = name; } //無參構造器 private Color(){ } //枚舉中單獨實現,每一個枚舉元素對象都可以調用到這個方法 public void sit(){ //.... } } 第二種方式來實現介面
public enum Color implements Sofa{ //每一個枚舉元素對象中單獨實現這個介面中的抽象方法 將來每個枚舉元素對象調用到的就是自己獨立實現的這個sit方法 RED("紅色"){ public void sit(){ //.... } }, GREEN("綠色"){ public void sit(){ //.... } }, BLUE{ public void sit(){ //.... } }; private String name; public String getName(){ return this.name; } //一個參數構造器 Color(String name){ this.name = name; } //無參構造器 private Color(){ } }7、枚舉中定義抽象方法
在一個枚舉中可以定義多個抽象方法,但枚舉中的每個元素必須分別實現這些抽象方法,如下代碼:
public enum Color { RED{ public String getInfo() {//RED中實現抽象方法 return "紅色"; } }, GREEN{ public String getInfo() {//GREEN中實現抽象方法 return "綠色"; } }, BLUE{ public String getInfo() {//BLUE中實現抽象方法 return "藍色"; } }; public abstract String getInfo();//定義抽象方法 }
以上就是枚舉的介紹