java中的枚举类_java中的枚举类型
java中為了對參數(shù)類型使用限定,引入了泛型,實現(xiàn)了在編譯期對參數(shù)類型是否合法的判斷。同樣,java為了對參數(shù)的值的限定,引入了枚舉類,實現(xiàn)了在編譯期對參數(shù)的值是否合法的判斷。
首先我們用自定義類的方法實現(xiàn)枚舉類,可以參考單例模式的實現(xiàn)思路,將類的構造方法設置為私有的,在類內(nèi)部定義static的變量,只能直接通過類名訪問自己定義的類,實現(xiàn)對類的值的限定。
1 public class TestEnum {
2
3 public static void main(String[] args) {
4 Weekday w = Weekday.Fri;
5 System.out.println(w);
6 System.out.println(Weekday.s);
7
8 }
9 }
10
11 class Weekday{
12 String weekday = null;
13 private Weekday(String str){
14 this.weekday = str;
15 }
16 static int s = 3000;
17 public static Weekday Sun = new Weekday("Sunday");
18 public static Weekday Mon = new Weekday("Monday");
19 public static Weekday Tues = new Weekday("Tuesday");
20 public static Weekday Wed = new Weekday("Wednesday");
21 public static Weekday Thu = new Weekday("Thurday");
22 public static Weekday Fri = new Weekday("Friday");
23 public static Weekday Sat = new Weekday("Saturday");
24
25 @Override
26 public String toString(){
27 return this.weekday;
28 }
29
30
31 }
使用的時候,每調(diào)用一次static屬性,就創(chuàng)建了一個實例。靜態(tài)的成員可以通過類名直接訪問。
java中用enum表示枚舉類,我們通過例子學習:
1 public class TestEnum1 {
2 public static void main(String[] args) {
3 // TODO Auto-generated method stub
4 Num n = Num.Six;
5 System.out.println(n);
6 System.out.println(n.ordinal());//表示的數(shù)字,從0開始。
7 System.out.println(Weekday1.FRI);
8 System.out.println(Weekday1.FRI.nextDay().nextDay());
9 System.out.println(Weekday1.FRI.nextDay().nextDay().ordinal());
10 }
11 }
12
13 enum Num{
14 Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten;
15 Num() {
16 System.out.println("this is null parameter constructor func");
17 }
18 }
19
20 enum Weekday1{
21 SUN("Sunday"),MON("Monday"),TUE("Tuesday"),WED("Wednesday"),THU("Thurday"),FRI("Friday"),SAT("Saturday");
22 String weekday1 = null;
23 Weekday1(String weekday1){
24 this.weekday1 = weekday1;
25 }
26 @Override
27 public String toString(){
28 return this.weekday1;
29 }
30 public Weekday1 nextDay() {
31 switch (this) {
32 case SUN:
33 return MON;
34 case MON:
35 return TUE;
36 case TUE:
37 return WED;
38 case WED:
39 return THU;
40 case THU:
41 return FRI;
42 case FRI:
43 return SAT;
44 default:
45 return SUN;
46 }
47
48 }
49 }
通過兩個類的比較和輸出可以總結出:
enum是一個特殊的類,他定義了自己的常量,而且類型是自己,默認的toString方法是把自己的名字轉(zhuǎn)換成string。
enum也有普通類的大部分用法,包括構造函數(shù),私有變量,抽象函數(shù)(比如匿名內(nèi)部類實現(xiàn)),不過用自定義成員的時候。必須把枚舉常量放在枚舉類的第一行。每個枚舉常量在定義的時候使用了一次構造函數(shù),在其他類中調(diào)用的時候也會再調(diào)用一次構造函數(shù),兩次的值一樣,但是指向的實際對象其實是不一樣的(可以通過構造函數(shù)的打印次數(shù)得出此結論)。ordinal()函數(shù)返回枚舉常量的序數(shù)(在聲明中的位置,初始常量的序數(shù)是0),被設計用于復雜的基于enum的數(shù)據(jù)結構。
總結
以上是生活随笔為你收集整理的java中的枚举类_java中的枚举类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国第几艘航母服役?
- 下一篇: 弹夹特工队的守护者如何无限旋转