枚举
使用 enum
定义枚举类
JDK 1.5 新增的 enum
关键字用于定义枚举类
枚举类和普通类的区别
- 使用
enum
定义的枚举类默认继承了java.lang.Enum
类 - 枚举类的构造器只能使用
private
访问控制符 - 枚举类的所有实例必须在枚举类中显式列出(,分隔;结尾). 列出的实例系统会自动添加
public static final
修饰 - 所有的枚举类都提供了一个
values
方法, 该方法可以很方便地遍历所有的枚举值 - JDK 1.5 中可以在
switch
表达式中使用枚举类的对象作为表达式,case
子句可以直接使用枚举值的名字, 无需添加枚举类作为限定 - 若枚举只有一个成员, 则可以作为一种单子模式的实现方式
枚举类的属性
- 枚举类对象的属性不应允许被改动, 所以应该使用
private final
修饰 - 枚举类使用
private final
修饰的属性应该在构造器中为其赋值 - 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数
public enum Week {
MONDAY("MON"), TUESDAY("TUES"), WEDNESDAY("WED"), THURSDAY("THUR"), FRIDAY("FRI"), SATURDAY("SAT"), SUNDAY("SUN");
// 必须要先定义枚举类型,才能定义方法
private String abbr;
// 声明的一个字符串,用于保存缩写信息
private Week(String abbr) {
this.abbr = abbr;
}
// 声明的一个私有构造方法,该方法只能在构造枚举常量时被调用,可以使枚举元素具有指定的缩写信息
public String getAbbr() {
return abbr;
}
// 通过该方法获得枚举元素的缩写
}
public class EnumPractice {
public static void main(String[] args) {
for (Week week : Week.values()) {
System.out.println("The order of " + week + " is " + week.ordinal());
// 使用ordinal()方法查看枚举元素的顺序
System.out.println("Compare to MONDAY : " + week.compareTo(Week.MONDAY));
// 用compareTo()方法来将当前枚举元素与Week.MONDAY比较
System.out.println("Equal to MONDAY ? " + week.equals(Week.MONDAY));
// 用equals()方法来将当前枚举元素与Week.MONDAY比较
System.out.println("Equal to MONDAY by == ? " + (week == Week.MONDAY));
// 用比较运算符==来将当前枚举元素与Week.MONDAY比较
// 从这里你应该可以看到,可以直接使用==来比较两个枚举元素
System.out.println("Name : " + week.name());
// 使用name()方法获得枚举元素的名称
System.out.println("Abbreviation : " + week.getAbbr());
// 使用自定义的getAbbr()方法输出星期的缩写
System.out.println("-------------------");
// 在每次循环快要结束时,打印一条分割线用于区分
}
}
}
点击查看结果
```
The order of MONDAY is 0
Compare to MONDAY : 0
Equal to MONDAY ? true
Equal to MONDAY by == ? true
Name : MONDAY
Abbreviation : MON
-------------------
The order of TUESDAY is 1
Compare to MONDAY : 1
Equal to MONDAY ? false
Equal to MONDAY by == ? false
Name : TUESDAY
Abbreviation : TUES
-------------------
The order of WEDNESDAY is 2
Compare to MONDAY : 2
Equal to MONDAY ? false
Equal to MONDAY by == ? false
Name : WEDNESDAY
Abbreviation : WED
-------------------
The order of THURSDAY is 3
Compare to MONDAY : 3
Equal to MONDAY ? false
Equal to MONDAY by == ? false
Name : THURSDAY
Abbreviation : THUR
-------------------
The order of FRIDAY is 4
Compare to MONDAY : 4
Equal to MONDAY ? false
Equal to MONDAY by == ? false
Name : FRIDAY
Abbreviation : FRI
-------------------
The order of SATURDAY is 5
Compare to MONDAY : 5
Equal to MONDAY ? false
Equal to MONDAY by == ? false
Name : SATURDAY
Abbreviation : SAT
-------------------
The order of SUNDAY is 6
Compare to MONDAY : 6
Equal to MONDAY ? false
Equal to MONDAY by == ? false
Name : SUNDAY
Abbreviation : SUN
-------------------
```
public class JavaSwitchEnumExample {
public enum Day {
Sun, Mon, Tue, Wed, Thu, Fri, Sat
}
public static void main(String args[]) {
Day[] DayNow = Day.values();
for (Day Now : DayNow) {
switch (Now) {
case Sun:
System.out.println("Sunday");
break;
case Mon:
System.out.println("Monday");
break;
case Tue:
System.out.println("Tuesday");
break;
case Wed:
System.out.println("Wednesday");
break;
case Thu:
System.out.println("Thursday");
break;
case Fri:
System.out.println("Friday");
break;
case Sat:
System.out.println("Saturday");
break;
}
}
}
}
点击查看结果
```
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
```
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
public class EnumTest {
Day day;
public EnumTest(Day day) {
this.day = day;
}
public void tellItLikeItIs() {
switch (day) {
case MONDAY:
System.out.println("Mondays are bad.");
break;
case FRIDAY:
System.out.println("Fridays are better.");
break;
case SATURDAY:
case SUNDAY:
System.out.println("Weekends are best.");
break;
default:
System.out.println("Midweek days are so-so.");
break;
}
}
public static void main(String[] args) {
EnumTest firstDay = new EnumTest(Day.MONDAY);
firstDay.tellItLikeItIs();
EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
thirdDay.tellItLikeItIs();
EnumTest fifthDay = new EnumTest(Day.FRIDAY);
fifthDay.tellItLikeItIs();
EnumTest sixthDay = new EnumTest(Day.SATURDAY);
sixthDay.tellItLikeItIs();
EnumTest seventhDay = new EnumTest(Day.SUNDAY);
seventhDay.tellItLikeItIs();
}
}
点击查看结果
```
Mondays are bad.
Midweek days are so-so.
Fridays are better.
Weekends are best.
Weekends are best.
```
参考资料:
https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html