一、枚举
1.1 为什么需要枚举
问题:要定义星期几或性别的变量,该怎么定义?個假设用1-7分别表示星期一到星期日,但有人可能会写成 int weekday=0
>枚举就是要让某个类型的变量的取值只能为若千个固定值中的一个,否则编译普遍就会报错。校举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
1.2 java5的枚举的基本应用
name 方法返回枚举对象的名称。自己实现了 toString方法。
ordinal()方法枚举对象的位置信息。从0开始
valueOf() 返回对应的枚举对象。
values() 返回一个枚举数组,将该枚举的所有对象都返回。这样就能够遍历enum实例。
在创建enum时,编译器会自动生成一个相关类,这个类继承java.lang.Enum
1.3 实现带有构造方法的枚举
元素列表必须位于其他元素之前。且用分号隔开。
且枚举类的构造方法必须是private的。如果不写也默认是private.
在枚举类后面使用()传入指定参数来指定需要调用那个构造方法。 其中空()表示默认构造方法。
1.4 实现带有抽象方法的枚举
内部类可以加访问修饰符。而外部类则只能是默认和public
代码://带有抽象方法的枚举
import java.util.Date;
public class EnumTest {
public static void main(String[] args) {
}
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");}
}
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;}
}
}