枚举是JDK1.5的新特性,是一种特别的“类”,使程序更为灵活,编写也更方便。枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
枚举的简单定义:
和普通类的定义不同,枚举的关键字是enum。Color可以看成是RED、GREEN和YELLOW的类型,而这三个成员可以看成简易的类。
public enum Color {
RED,GREEN,YELLOW;
}
和普通类的定义不同,枚举的关键字是enum。Color可以看成是RED、GREEN和YELLOW的类型,而这三个成员可以看成简易的类。
既然是类,当然可以有其构造函数,例,
public enum WeekDay{
SUN("32",1),MON(),TUES,WED,THUR,FRI,SAT;
private WeekDay() {
System.out.println(11111);
}
private WeekDay(String name, int ordinal) {
System.out.println(2222);
}
}
}
只有SUN在调用含参构造函数,其他都调用了无参构造函数。且只要调用了一个枚举元素,其他都会执行初始化,因而,在main方法调用时,只要调用一个枚举,就会打印1次“2222”,6次“11111”。
细节:
1、枚举成员要大写;
2、枚举成员间要用“,”隔开,最后一个成员后面可加可不加“;”;若最后还要内容,则要加“;”;
3、枚举的构造函数必须定义在所有元素后面,且私有。
4、调用枚举成员应该用“枚举.枚举成员”形式来表示,如上面的 WeekDay.Mon
由细节中可以看出,当枚举只有一个成员时,且因为构造函数私有,则作为一种单例的实现方式。
枚举中的简单方法:
1、ordinal():int; 返回调用枚举对象所在枚举中的位置
2、valueOf(String enumName)":Enum;
根据枚举的名字返回对应的枚举
3、values():Enum[]; 将所有枚举对象转成数组;
枚举的简单运用:
public enum TrafficLamp{
RED (30){
@Override
public TrafficLamp nextLamp() {
return GREEN;
}
},GREEN(35) {
@Override
public TrafficLamp nextLamp() {
return YELLOW;
}
},YELLOW(5) {
@Override
public TrafficLamp nextLamp() {
return RED;
}
};
private int time;
private TrafficLamp(int time) {
this.time = time;
}
public abstract TrafficLamp nextLamp();
}
}
枚举成员实现枚举中的抽象方法,当调用一成员中的函数时,便会返回下一个成员。例如在main方法中调用 TrafficLamp.RED.nextLamp();时,则会返回GREEN。