一、枚举类概述
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()); // 输出:男 }