枚举是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。
枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略。
枚举类可以有构造器,但必须是private的,它默认的也是private的。
枚举类也可以有抽象方法,但是枚举项必须重写该方法。
1、无参
public enum Week {
MON,TUE,WED;
}
使用
Week mon = Week.MON;
2、有参
public enum Week2 {
MON("星期一"),TUE("星期二"),WED("星期三");
private String name;
private Week2(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String toString() {
return name;
}
}
使用
Week2 mon = Week2.MON;
3、抽象方法
public enum Week3 {
MON("星期一"){
public void show() {
System.out.println("星期一");
}
},TUE("星期二"){
public void show() {
System.out.println("星期二");
}
},WED("星期三"){
public void show() {
System.out.println("星期三");
}
};
private String name;
private Week3(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void show();
}
使用
Week3 mon = Week3.MON;
mon.show();
4、switch中使用
Week3 mon = Week3.TUE;
switch (mon) {
case MON:
System.out.println("星期一");
break;
case TUE:
System.out.println("星期二");
break;
}
5、其他方法
Week2 mon = Week2.MON;
System.out.println(mon.name());//获取实例名称(MON)
System.out.println(mon.toString());//调用重写之后的toString方法(星期一)
Week2 mon = Week2.valueOf(Week2.class, "MON");//通过字节码对象获取枚举项(星期一)
System.out.println(mon);
//遍历
Week2[] arr = Week2.values();
for (Week2 week2 : arr) {
System.out.println(week2);//星期一、二、三
}