深入Java枚舉機制

一、枚舉作用的介紹

所謂的“枚舉”,其實就是讓某個類型變量的取值只能爲若干個固定值中的一個,否則,編譯器就會報錯。枚舉可以讓編譯器在編譯時期就控制源程序中填寫的非法值,普通變量的方式在開發階段無法實現這一目標。

二、用普通類模擬枚舉實現的原理

由於在實際的開發中,程序中經常免不了要用到時間問題,爲了更好的統一表示“星期幾”這個問題,我們可以自定義一個WeekDay類,具體代碼如下:

public class EnumTest {

 

              public static void main(String[] args) {

                           

              WeekDay weekDay2 = WeekDay.FRI;

              System.out.println(weekDay2);

             

                     }

 

       public enum WeekDay{

 

              SUN(1),MON(),TUE,WED,THI,FRI,SAT;

              private WeekDay(){System.out.println("first");}

              private WeekDay(int day){System.out.println("second");}

       }

      

      

}

三、枚舉的基本應用

 

1int compareTo(E o)

         比較此枚舉與指定對象的順序。

2boolean equals(Object other)

         當指定對象等於此枚舉常量時,返回 true

 

 3Class<E> getDeclaringClass()

         返回與此枚舉常量的枚舉類型相對應的 Class 對象。

 4int hashCode()

         返回枚舉常量的哈希碼。

 5String name()

         返回此枚舉常量的名稱,在其枚舉聲明中對其進行聲明。

 6int ordinal()

         返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數爲零)。

 7String toString()

         返回枚舉常量的名稱,它包含在聲明中。

8static <T extends Enum<T>>

T  valueOf(Class<T> enumType, String name)

         返回帶指定名稱的指定枚舉類型的枚舉常量。

9、示例代碼如下:

import java.util.Date;

 

public class EnumTest {

 

      

       public static void main(String[] args) {

             

             

              WeekDay weekDay2 = WeekDay.FRI;

              System.out.println(weekDay2);

              System.out.println(weekDay2.name());

              System.out.println(weekDay2.ordinal());    

              System.out.println(WeekDay.valueOf("SUN").toString());

              System.out.println(WeekDay.values().length);

      

       }

 

       public enum WeekDay{

 

              SUN(1),MON(),TUE,WED,THI,FRI,SAT;

              private WeekDay(){System.out.println("first");}

              private WeekDay(int day){System.out.println("second");}

       }

      

      

}

四、實現帶有構造方法的枚舉

      事實上,由於枚舉中的每一個成員都是一個對象,由於是對象就可以初始化,所以就要調用構造方法,常見的枚舉類型都沒有書寫構造方法,但那並不代表就沒有構造方法,它只是調用了默認的空的構造方法而已。下面我們就書寫一下擁有構造方法的枚舉:

具體代碼如下:

import java.util.Date;

 

publicclass EnumTest {

 

   

    publicstaticvoid main(String[] args) {

      

      

      

      

    }

 

   

   

    publicenum TrafficLamp{

       RED(30),

       GREEN(45),

       YELLOW(5);

   

       privateinttime;

       private TrafficLamp(int time){this.time = time;}

    }

}

 

五、實現帶有抽象方法的枚舉

既然枚舉中的每一個成員都是一個對象,那麼當我們定義了一個抽象方法時,它自然也要實現此抽象方法了,下面我們就做演示;

具體代碼如下:

import java.util.Date;

 

publicclass EnumTest {

 

   

    publicstaticvoid main(String[] args) {

   

      

    }

 

   

   

    publicenum TrafficLamp{

       RED(30){

           public  TrafficLamp nextLamp(){

              returnGREEN;

           }

       },

       GREEN(45){

           public  TrafficLamp nextLamp(){

              returnYELLOW;

           }         

       },

       YELLOW(5){

           public  TrafficLamp nextLamp(){

              returnRED;

           }         

       };

       publicabstract TrafficLamp nextLamp();

       privateinttime;

       private TrafficLamp(int time){this.time = time;}

    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章