----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
枚举
a) 为什么要用枚举
枚举就是要让某个类型的变量的取值只能为若干个固定值的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,而使用普通变量的的方式在开发阶段无法实现这一目标。
b) 用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能
i. 私有的构造方法,防止任意实例化。
ii. 每个元素分别用一个公有的静态成员变量表示。
iii. 采用抽象方法定义nextDay就将大量的if else 语句转移成了一个个独立的类(在这里用到了内部类的概念)
iv. 如果想在一个类中编写各个枚举类和测试调用类,可以将枚举类定义成调用类的内部类。
c) 枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后面要有分号与其他成员分隔。
d) 枚举的构造方法,必须定义成私有的。默认调用无参构造方法。
e) 枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法、和抽象方法。
f) 每一个元素分别是枚举类的一个实例。
package HeightNew2010;
public class EnumTest {
public static void main(String[] args) {
System.out.println(WeekDayEnum.MON.name().toString());
System.out.println(WeekDayEnum.MON.ordinal()); //ordinal序数从0开始
System.out.println(WeekDayEnum.MON);
System.out.println(WeekDayEnum.values().length);
System.out.println(WeekDayEnum.valueOf("MON"));
System.out.println(lamp.RED.nextLamp());
}
//定义一个一般的枚举——星期
public enum WeekDayEnum{
SUN,MON,TUE,WED,THI,FRI,SAT
}
//定义一个带抽象方法、构造函数、成员变量、普通方法的枚举——交通灯枚举public enum lamp{
RED (50){
@Override
public lamp nextLamp() {
return lamp.GREEN;
}
},GREEN(50) {
@Override
public lamp nextLamp() {
return lamp.YELLOW;
}
},YELLOW (5){
@Override
public lamp nextLamp() {
return lamp.RED;
}
};int time; //成员变量
lamp(){} //无参构造函数
lamp(int time){this.time=time;} //带参构造函数
public abstract lamp nextLamp();
}
}