在JDK1.5之前沒有enum關鍵字,如果想使用枚舉類,程序員需要根據Java語言的規則自行設計。從JDK1.5開始,Java語言添加了enum關鍵字,可以通過該關鍵字方便地定義枚舉類。這種枚舉類有自己的程序編寫規則,并且具有一些特殊方法。
下面是筆者分別針對自定義枚舉類和enum枚舉類的程序設計。
?
[1] 自定義枚舉類
1 /*------------------------- 2 JDK1.5之前通過自行設計程序,來自定義枚舉類 3 下面以季節為例自定義枚舉類 4 --------------------------*/ 5 package pack01; 6 7 public class Season { 8 public static void main(String[] args) { 9 10 FourSeasons spring = FourSeasons.SPRING; 11 FourSeasons winter = FourSeasons.WINTER; 12 13 System.out.println( spring.getName() ); 14 System.out.println( spring.toString() ); 15 System.out.println(); 16 System.out.println( winter.getName() ); 17 System.out.println( winter.toString() ); 18 } 19 } 20 21 // 定義表示季節的枚舉類,共有4個內部對象 22 class FourSeasons { 23 24 // 定義類的屬性:私有的,終態的,在構造器中進行初始化 25 private final String name; 26 27 // 將構造器私有化,使構造器不能在類的外部被使用 28 private FourSeasons(String name) { 29 this.name = name; 30 } 31 32 // get方法返回屬性值 33 public String getName() { 34 return name; 35 } 36 37 // 覆蓋toString方法,設置默認打印值 38 public String toString() { 39 return "This is " + name; 40 } 41 42 // 在類的內部創建對象 43 public static final FourSeasons SPRING = new FourSeasons("spring"); 44 public static final FourSeasons SUMMER = new FourSeasons("summer"); 45 public static final FourSeasons AUTUMN = new FourSeasons("autumn"); 46 public static final FourSeasons WINTER = new FourSeasons("winter"); 47 }
?
[2] 使用enum關鍵字定義枚舉類
1 /*------------------------- 2 JDK1.5開始可以通過enum關鍵字來定義枚舉類 3 使用enum關鍵字定義枚舉類與自定義枚舉類的程序編寫不同之處: 4 ....//將關鍵字class用關鍵字enum替換 5 ....//必須在類體的一開始創建內部的對象,并遵循一定的書寫規則 6 ....//枚舉類有兩個常用的方法: 7 ........//values():將枚舉類中的所有對象以數組的方式返回 8 ........//valueOf(String arg0):將類中的某一個對象的名字以字符串的形式作為參數傳入,返回該對象 9 ....//枚舉類可以實現接口,覆蓋接口中的抽象方法既可以寫在枚舉類的類體中,也可以寫在對象后的花括號中 10 ........//若寫在了對象后的花括號中,則該方法不再是所有對象公共的。不同對象調用同一方法時,可以得到不同的效果。 11 12 下面以季節為例使用enum關鍵字定義枚舉類 13 --------------------------*/ 14 package pack02; 15 16 public class Season { 17 public static void main(String[] args) { 18 19 //測試枚舉類中的values()方法 20 FourSeasons[] seasons = FourSeasons.values(); 21 for( int i=0; i<seasons.length; ++i ) { 22 System.out.println( seasons[i].getName() ); 23 } 24 System.out.println(); 25 26 //測試枚舉類中的valueOf()方法,創建春天的對象 27 FourSeasons spring = FourSeasons.valueOf("SPRING"); 28 System.out.println( "valueOf(\"SPRING\"): " + spring.getName() + '\n' ); 29 30 //創建夏,秋,冬的對象 31 FourSeasons summer = FourSeasons.SUMMER; 32 FourSeasons autumn = FourSeasons.AUTUMN; 33 FourSeasons winter = FourSeasons.WINTER; 34 spring.printWords(); 35 summer.printWords(); 36 autumn.printWords(); 37 winter.printWords(); 38 //上面調用接口中的方法打印出來的結果,春天與其他三個季節是不同的,因為SPRING對象重新覆蓋了接口中的方法 39 } 40 } 41 42 //定義一個接口,讓枚舉類來實現該接口 43 interface Inter{ 44 void printWords(); 45 } 46 47 // 定義表示季節的枚舉類,共有4個內部對象 48 enum FourSeasons implements Inter { //使用enum關鍵字,并實現上述接口 49 50 //必須在類體中的一開始創建對象,對象之間用逗號分開,并且要遵循一定的書寫規則 51 SPRING("spring"){ 52 public void printWords() {//在創建對象時可以單獨重寫接口中的方法,這時類體中的重寫方法對于該對象將不再起作用 53 System.out.println("This is spring"); 54 } 55 }, 56 SUMMER("summer"), 57 AUTUMN("autumn"), 58 WINTER("winter"); 59 60 // 定義類的屬性:私有的,終態的,在構造器中進行初始化 61 private final String name; 62 63 // 將構造器私有化,使構造器不能在類的外部被使用 64 private FourSeasons(String name) { 65 this.name = name; 66 } 67 68 // get方法返回屬性值 69 public String getName() { 70 return name; 71 } 72 73 // 重寫接口中的抽象方法 74 public void printWords() { 75 System.out.println("There are four different seasons."); 76 } 77 }
?
注:希望與各位讀者相互交流,共同學習進步。