1. 定义枚举
Java中的枚举是表示一组常量,如生活中常见的星期,性别,月份。
定义枚举时用到enum
关键字。
如:
public enum WeekDay {
SUN, MON, TUE, WED, THU, FRI, SAT
}
上面定义了星期的枚举,未指定类型时的枚举默认是整型。从0开始依次递增。
有时候我们希望自已指定枚举变量的值,可以用下面的方法:
public enum WeekDay {
SUN(0), MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6);
public final int value;
WeekDay(int value) {
this.value = value;
}
}
如果想使用其他类型的枚举变量,可能用下面的方法:
public enum Sexual {
MALE("男"), FEMALE("女");
public final String value;
Sexual(String value) {
this.value = value;
}
}
2. 枚举的使用
2.1 枚举和switch
使用枚举和switch联合使用,枚举和switch有着天然的匹配。
public class EnumStudy {
public static void main(String[] args) {
WeekDay weekDay = WeekDay.FRI;
switch(weekDay){
case SUN:
System.out.println("今天是星期日");
break;
case MON:
System.out.println("今天是星期一");
break;
case TUE:
System.out.println("今天是星期二");
break;
case WED:
System.out.println("今天是星期三");
break;
case THU:
System.out.println("今天是星期四");
break;
case FRI:
System.out.println("今天是星期五");
break;
case SAT:
System.out.println("今天是星期六");
break;
default:
System.out.println("星期错误");
}
}
}
运行结果:
今天是星期五
2.2 枚举的方法
枚举默认继承了java.lang.Enum类,并且默认是最终类所以枚举不能被继承。在java.lang.Enum类中有values()
, ordinal()
和 valueOf()
等方法。
- values()方法,以数给形式返回枚举的所有成员
- ordinal()方法,显示枚举成员定义时的顺序
- valueOf()方法,返回字符串代表的枚举常量
使用values()方法遍历枚举
public class EnumStudy2 {
public static void main(String[] args) {
for(WeekDay weekDay : WeekDay.values()){
System.out.println(weekDay);
}
}
}
运行结果:
SUN
MON
TUE
WED
THU
FRI
SAT
使用ordinal()方法显示枚举定义时的顺序
public class EnumStudy2 {
public static void main(String[] args) {
for(WeekDay weekDay : WeekDay.values()){
System.out.print(weekDay);
System.out.println(" ordinal = " + weekDay.ordinal());
}
}
}
运行结果:
SUN ordinal = 0
MON ordinal = 1
TUE ordinal = 2
WED ordinal = 3
THU ordinal = 4
FRI ordinal = 5
SAT ordinal = 6
使用valueOf()返回枚举常量
public class EnumStudy3 {
public static void main(String[] args) {
System.out.println(WeekDay.valueOf("SUN"));
System.out.println(WeekDay.valueOf("MON"));
System.out.println(WeekDay.valueOf("TUE"));
System.out.println(WeekDay.valueOf("WED"));
System.out.println(WeekDay.valueOf("THU"));
System.out.println(WeekDay.valueOf("FRI"));
System.out.println(WeekDay.valueOf("SAT"));
}
}
运行结果:
SUN
MON
TUE
WED
THU
FRI
SAT
如果我们使用了枚举中不存在的常量,则会抛出异常
public class EnumStudy4 {
public static void main(String[] args) {
System.out.println(WeekDay.valueOf("SSS"));
}
}
运行结果:
抛出异常不存在的常量
Exception in thread "main" java.lang.IllegalArgumentException: No enum constant Enum.WeekDay.SSS
at java.lang.Enum.valueOf(Enum.java:238)
at Enum.WeekDay.valueOf(WeekDay.java:11)
at Enum.EnumStudy4.main(EnumStudy4.java:13)
3. 使用枚举的优点
- 使用枚举可增加程序的可读性,常量名比数字更容易被人理解。
- 使用枚举可以限定变量的赋值规则,防止变量被赋予非法的值。