枚举

枚举

使用 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

原文地址:https://www.cnblogs.com/hgnulb/p/10091050.html