概念
让某个类型的变量的值只能取若干个值中的一个,否则,编译器报错。将原先运行时才能发现的问题提前到编译时揭露。也是jdk1.5新特性
-
实现原理:
-
1、将构造函数私有化, 使其他人无法创建对象
2、定义预定数量的对象,并用public 和final、static修饰,供使用者调用
3、可以有若干具体或抽象方法,比如获取下一个元素的方法,可以定义为抽象,然后在各自创建对象时使用匿名内部类调用该方法,这样可以省下if else的大量出现。
定义(创建):
enum WeekDay
{
SUN,MON ,TEU,WES,TUR,FRI,SAT;
}
- 要点:
元素必须放在第一行,其他内容位于元素列表之后。若只有元素列表,最后可不加分号。
在元素后加括号传入参数,可表示在创建该元素实例对象时,使用的是对应参数的构造方法
使用:
WeekDay wd = WeekDay. FRI;
提供的方法:
wd.toString():
wd.name():
wd.ordinal():
静态方法:
-
WeekDay.valueOf(“SUN”);把字符串变成WeekDay对象
WeekDay.values();枚举类变成对象数组
进阶
带有抽象方法的枚举类代码范例:
public enum TrafficLamp
{
RED(50)//创建TrafficLamp的子类对象,并覆盖抽象方法
{
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN(40)
{
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;
}
}