黑马程序员--枚举类(enum)
原创
©著作权归作者所有:来自51CTO博客作者shineflowers的原创作品,请联系作者获取转载授权,否则将追究法律责任
通过下面的一个实例,可以了解枚举类的一些用法:
public enum WeekDay {
SUN,MON,TUE,WED,THU,FRI,SAT; //创建一个枚举类(最后的分号可以不要)
}
1. WeekDay weekDay = WeekDay.FRI;
System.out.println(weekDay);
System.out.println(weekDay.name()); //效果和上面的一样
获取的是一个对象,但是在打印的时候,自动实现了toString()方法,因此结果就是FRI。
2. System.out.println(weekDay.ordinal());
返回的是该对象在枚举类中的序列号(从0开始),结果为5。
3. weekDay.compareTo(o);
weekDay.equals(other);
这两个是用来比较两个对象时否相等。
4. System.out.println(weekDay.getClass());
获取定义自己的类(WeekDay)。
枚举类中的静态方法:
System.out.println(WeekDay.valueOf("SUN"));
System.out.println(WeekDay.valueOf("SU")); //编译出错
将字符串 SUN 转化成枚举对象中的元素(值得注意的是,如果传入的字符串不是枚举类中的元素,编译就出错)。
System.out.println(WeekDay.values()); //将枚举类中的元素放在一个数组中
for(WeekDay weekDay : WeekDay.values()) { //增强for循环遍历数组的元素
System.out.println(weekDay);
}
该静态方法可以用来遍历枚举类中的元素……
枚举类的构造函数
public enum WeekDay {
SUN,MON,TUE,WED,THU,FRI,SAT;
private WeekDay() {System.out.println("First");}
private WeekDay(int day){System.out.println("Second");}
}
创建构造函数时注意:
①创建的构造函数必须位于元素列表之后
②创建的构造函数的类型必须为private
在枚举类的对象被创建时,默认调用的是无参的构造函数(上面调用的都是调用WeekDay()这个无参的构造函数),所以打印的结果为:
First
First
First
First
First
First
如果在调用有参的构造函数,要在枚举元素的后面加一个括号,里面传一个参数,如下:
public enum WeekDay {
SUN(1),MON,TUE,WED(4),THU,FRI,SAT;
private WeekDay() {System.out.println("First");}
private WeekDay(int day){System.out.println("Second");}
}
打印的结果为:
Second
First
First
Second
First
First
First
因此括号里面不传参数,也是调用无参的构造函数(和不加括号的效果一样)。
枚举类中的抽象方法(交通灯的实例)
在枚举类中可以定义抽象方法时,但是在定义枚举元素的时候,就必须实现这个抽象方法。
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;
}
}
这个实例综合了上面所学到的枚举类中的所有知识点,也是枚举类中最复杂的。
值得注意的是:当枚举只有一个成员时,就可以作为一种单例的实现方式……