一、枚舉作用的介紹
所謂的“枚舉”,其實就是讓某個類型變量的取值只能爲若干個固定值中的一個,否則,編譯器就會報錯。枚舉可以讓編譯器在編譯時期就控制源程序中填寫的非法值,普通變量的方式在開發階段無法實現這一目標。
二、用普通類模擬枚舉實現的原理
由於在實際的開發中,程序中經常免不了要用到時間問題,爲了更好的統一表示“星期幾”這個問題,我們可以自定義一個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");}
}
}
三、枚舉的基本應用
1、int compareTo(E o)
比較此枚舉與指定對象的順序。
2、boolean equals(Object other)
當指定對象等於此枚舉常量時,返回 true。
3、Class<E> getDeclaringClass()
返回與此枚舉常量的枚舉類型相對應的 Class 對象。
4、int hashCode()
返回枚舉常量的哈希碼。
5、String name()
返回此枚舉常量的名稱,在其枚舉聲明中對其進行聲明。
6、int ordinal()
返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數爲零)。
7、String toString()
返回枚舉常量的名稱,它包含在聲明中。
8、static <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;}
}
}