Java分享筆記:自定義枚舉類 & 使用enum關鍵字定義枚舉類


  在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 }

 

注:希望與各位讀者相互交流,共同學習進步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM