枚举类
1 什么是枚举类
枚举类是指,类的对象为确定的、有限个的类。
枚举类使用场景:需要定义一组常量时,推荐应用枚举类。
2 枚举类的定义
jdk5.0之前,定义枚举类的方式为:自定义枚举类;
jdk5.0时,定义枚举类的方式为:使用关键字enum
。
1) 自定义枚举类
自定义枚举类,就是定义类时手动实现类的对象是确定的、有限个,具体地:
- 私有化构造器,限定枚举类的对象的构造;
- 定义公共的、不可变的、static的对应类的属性,以保存对应枚举类的确定的、有限个的对象;
- 在类中构造对应的确定的、有限个类的对象。
示例:
2) 使用enum关键字定义枚举类
enum
关键字是专门用来定义枚举类的关键字,用法与class
关键字一致,使用格式为enum 类名{}
。
使用enum
关键字定义枚举类的要点:
在类中首先声明该枚举类的确定的、有限个的类的对象。
- 在
enum
关键字修饰的枚举类中,枚举类对应的对象默认为私有构造器构造的公共的、static的、不变的对象,因此不需要声明public static final
,也无需声明变量来赋值以保存对应的枚举类对象,只需要按照私有化的构造器来直接声明对象的对象名及其对应传入的属性(如果空参构造器,就只需要声明对象名); - 多个枚举类对象,用逗号分隔,声明的最后一个枚举类对象用分号分隔。
- 在
私有化构造器。
- 私有化的构造器应该与声明的枚举类对象是一致的,即私有化的构造器若是带参的,则声明的枚举类对象是带有实参的,私有化的构造器若是空参的,则声明的枚举类对象不需要有参数。
使用
enum
关键字定义枚举类默认为继承Enum
类(java.lang.Enum),Enum
类是所有枚举类的基类。- 使用
enum
关键字定义枚举类继承自Enum
类的toString
方法,该方法返回对应枚举类对象的对象名,因此使用enum
关键字定义的枚举类一般无需重写对应的toString
方法。
- 使用
Enum
类中的常用方法:
public String toString()
:该方法返回对应枚举类对象的对象名。public static <T extends Enum<T>> T valueOf(String name)
:该方法返回指定枚举类对象名对应的枚举类对象,相当于返回对应对象的toString()
方法的结果。public static Enum[] values()
:该方法返回对应枚举类中的所有枚举类对象构成的枚举类数组。该方法并不是在Enum
中的,而是在编译java文件时,java编译器自动帮助我们生成这个方法。
示例:
使用enum
关键字定义的枚举类实现接口时的特点:
- 针对实现的接口的抽象方法可以直接在对应类中重写;
- 针对实现的接口的抽象方法,可以针对每个枚举类对象来重写,相当于每个枚举类对象重写了实现类中的抽象方法。
示例: