黑马程序员-java高新技术02
----------------------android培训、java培训、java学习型技术博客、期待与您交流!----------------------
?
??????? 枚举是jdk1.5中的另外一个重要的新特性,枚举可以避免在编译时程序中出现非法值,举个简单的例子,我们要定义表示星期几的变量,假设用1-7分别表示星期一道星期天,可有的人可能会用0表示星期天,这就造成程序在运行期间会出现一些不可预知的现象,而枚举就可以限定某个类型的变量只能为某些固定的值,否则编译器就会报错,而普通的变量的开发方式是无法做到这一点的。
??????? 下面就是一个代表一周七天的枚举类,这样在表示星期几的时候就只能用SUN, MON, TUE, WED, TRI, FRI, SAT;这些值的某一个,有效避免了程序在运行期间出现错误。
public enum WeekDay {SUN, MON, TUE, WED, TRI, FRI, SAT;}??????
????? ? 枚举是一种特殊的类,其中的每一个元素都是该类的一个实例对象,在调用枚举类中的元素是时,就相当于调用了一个具体的实例对象,下面的代码可以说明这一点
public enum WeekDay {SUN(1), MON(), TUE, WED, TRI, FRI, SAT;//构造方法必须是私有的private WeekDay(){System.out.println("默认构造方法");}private WeekDay(int day) {System.out.println("有参构造方法");}}??????
?????? ?枚举既然是一种特殊的类,当然也就可以在枚举类中定义构造方法,成员变量,成员方法和抽象方法,要注意的是枚举元素必须位于枚举体中的最开始部分,枚举列表的后面要用分号和其他的成员分开,否则编译器会报错,枚举类中的构造方法必须定义成私有的,上面的代码中,MON()和MON的效果是一样的,都是调用默认的构造方法。
?????? 下面的代码是一个带有抽象方法的模拟交通灯的枚举类
public enum TrafficLamp {RED(30) {@Overridepublic TrafficLamp nextLamp() {return GREEN;}}, GREEN(45) {@Overridepublic TrafficLamp nextLamp() {return YELLOW;}}, YELLOW(5) {@Overridepublic TrafficLamp nextLamp() {return RED;}};public abstract TrafficLamp nextLamp();private int time;private TrafficLamp(int time) {this.time = time;}}???????? 其中的每个元素分别是由枚举类的子类来生成的子类对象,这些子类是采用类似内部类的方式定义的。???
???????? 此外,当枚举类只有一个成员时,可以做为一种单例的实现方式。
?
----------------------android培训、java培训、java学习型技术博客、期待与您交流!----------------------
?
详情请查看:http://edu.csdn.net/heima?