1.认识枚举
枚举主要用于定义一组可以使用的类对象,这样在使用时只能通过固定的几个对象来进行类的操作。例如,如果要表示日期的对象,只能有7种定义,周一至周日;如果要表示人的性别,只能有2种定义,男或女;等等。
2.枚举的使用
java中使用enum关键字定义枚举类型,如:
enum Color{//定义枚举类
RED,GREEN,BLUE;//表示实例化对象
}
使用Color.RED可以直接取得枚举对象
3.定义其他结构
枚举属于多例设计模式,也是一个类,所以其中也可以包括属性、方法、构造方法等一系列内容。但需要注意以下两点:
1.枚举中定义的构造方法不能使用public声明,如果没有无参构造,要手工调用构造参数传递
2.枚举对象必须要放在首行,随后才可以定义属性、构造、普通方法等结构
enum Time{ //枚举5种时间实例
DAWN(0,6),
MORNING(6,12),
NOON(12,14),
AFTERNOON(14,18),
NIGHT(18,24);
private int starttime , endtime;
Time(int starttime, int endtime) {//构造方法
this.starttime = starttime;
this.endtime = endtime;
}
private static Time[] time = new Time[5];
static {
time[0] = DAWN;
time[1] = MORNING;
time[2] = NOON;
time[3] = AFTERNOON;
time[4] = NIGHT;
}
public static Time getType(int currenttime){//定义普通方法
if(DAWN.contains(currenttime)){
return DAWN;
}else if(MORNING.contains(currenttime)){
return MORNING;
}else if(NOON.contains(currenttime)){
return NOON;
}else if(AFTERNOON.contains(currenttime)){
return AFTERNOON;
}else
return NIGHT;
}
public static Time getIndex(int i){//定义普通方法
return time[i];
}
private boolean contains(int currenttime) {
return starttime<=currenttime && currenttime<endtime;
}
}
此外:枚举类含有静态方法values来获取按声明顺序的,包含所有定义值的数组
如一开始中Color的例子
for(Color c : Color.values()){//取得全部枚举对象
……
}
最后,关于枚举中定义对象括号的作用:
1.自定义枚举类中的括号是用来添加常量额外的参数
2枚举类中要添加参数对应的域(变量)
3.构造器中输入的参数要与声明的顺序、数量匹配