JAVA基础加强:枚举(Enum)

时间:2020-12-21 19:42:23


枚举(Enum)

1.什么是枚举

    枚举就是让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。

枚举可以让编译器在编译时就可以控制程序中填写的非法代码。


2.用普通类实现枚举的功能

步骤:

私有够造方法;

每个元素分别用一个公用的静态成员变量表示;

可以有若干公用方法或抽象方法。

package cn.itcast.day1;

public class EnumTest {

}
abstract class Weekday{
private Weekday(){
}
public final static Weekday SUN = new Weekday(){

@Override
public Weekday nexDay() {
// TODO Auto-generated method stub
return MON;
}

};
public final static Weekday MON = new Weekday(){

@Override
public Weekday nexDay() {
// TODO Auto-generated method stub
return SUN;
}

};
public abstract Weekday nexDay();
public String toString(){
return this==SUN?"SUN":"MON";
}
}
3.应用

     

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)一些普通方法:.name()名字;.ordinal() 枚举的元素在枚举中的顺序,如WeekDay.SUN.ordinal()的值为0;

 (2)一些静态方法:

WeekDay.valueOf("SUN")将特定的字符串转换成实例;

WeekDay.values() 获得枚举中所有元素组成的数组;

4.带有构造方法的枚举(例子见3)

注意:

a.构造方法必须写在所有元素的列表后面;

b.枚举的构造方法必须都是私有的。

枚举的袁术后带有一对括号,括号内对应相应参数列表的构造函数,如SUN对象第二个构造函数。


5.实现代谢抽象方法的枚举

枚举中有抽象方法,则其元素中必须重写抽象方法

public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}

6.如果枚举只有一个成员时,就可以作为单例的实现形式。