15. 枚举类

一、枚举类概述

1. 枚举类是一种特殊的类,它的对象是有限而且固定的

2. 枚举类使用enum关键字来定义,并且默认使用final修饰

3. 枚举类的所有实例必须在枚举类的第一行显式列出,系统会自动添加public static final修饰

public enum Season
{
	// 在第一行列出4个枚举实例
	SPRING, SUMMER, FALL, WINTER;
}
  • 上面代码块中列出了4个枚举值,这些枚举值代表了Season枚举类的所有可能的实例
  • 如果需要使用枚举类的某个实例,可使用EnumClass.variable的形式,如Season.SPRING

4. 枚举类继承了java.lang.Enum类,故可直接使用该类中所包含的方法

  • int compareTo(E o):与指定枚举实例比较顺序
  • String name():返回枚举实例的名称
  • int ordinal():返回枚举值在枚举类中的索引值(即枚举值在枚举声明中的位置)
  • String toString():返回枚举实例的名称,与name()相似,但此方法更常用
  • public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name):返回指定枚举类中指定名称的枚举值

 

二、枚举类的成员

1. 构造器

  • 枚举类的构造器只能使用private访问控制符来修饰,可以省略不写(系统自动添加private修饰符)
  • 如果定义了final成员变量,则应显式定义带参数的构造器,此时列出枚举值时就必须对应地传入参数

2. 成员变量

  • 枚举类通常应该设计成不可变类,故建议将枚举类的成员变量都使用private final修饰
  • 对于final成员变量,有三种方法指定初始值,但通常选择在构造器里为这些成员变量指定初始值,因此应该为枚举类显式定义带参数的构造器,此时列出枚举值时就必须对应地传入参数

3. 代码示例

public enum Gender
{
	// 此处的枚举值必须调用对应的构造器来创建
	MALE("男"), FEMALE("女");

	// 成员1:成员变量
	private final String name;
	// 成员2:构造器
	[private] Gender(String name)
	{
		this.name = name;
	}
	// 成员3:方法
	public String getName()
	{
		return this.name;
	}
}

补:当为Gender枚举类创建了Gender(String name)构造器后,枚举值就必须通过调用它来创建。也就是说,在枚举类中列出枚举值时,实际上就是调用构造器创建枚举类对象,只是这里无须使用new关键字,也无须显式调用构造器。之所以前面列出枚举值无须传入参数,甚至无须使用括号,是因为前面的枚举类包含无参数的构造器。

	public static void main(String[] args)
	{
		Gender g1 = Gender.MALE;
		System.out.println(g1.getName());		// 输出:男
	}

 

posted @ 2019-07-15 00:23  GGBeng  阅读(507)  评论(0编辑  收藏  举报