【基本介绍】
(1)枚举对应英文 enumeration 简写enum
(2)枚举是一组常量的组合
(3)可以理解为:枚举属于一种特殊的类,里面只包含一组有限的特定的对象。
【枚举的两种实现方式】
?自定义类实现枚举
(1)不需要提供setXx方法,因为枚举对象值通常为只读
(2)对枚举对象/属性使用final + static共同修饰,实现底层优化
(3)枚举对象名通常使用全部大写,常量的命名规范
(4)枚举对象根据需要,也可以有多个属性
例子:季节类(一共四个季节)
?使用 enum 关键字实现枚举
(1)当使用 enum 关键字开发一个枚举类的时候,默认会继承 Enum类,而且是一个final类。(可通过javap反编译证明)
(2)传统的自定义类实现枚举
public static final Season SUMMER= new Season("夏天", "日头晒");
简化为:SUMMER("夏季", "日头晒")
这里必须知道,它调用的是哪个构造器
(3)如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略。
(4)当有多个枚举对象时,使用逗号,间隔,最后一个分号结尾;
(5)枚举对象必须放在枚举类的行首。
【enum常用方法说明】
//调用toString方法,没有重写该方法的话,返回的是对象名
System.out.println(Season2.SPRING);
//name:返回对象名(常量名),不能重写
System.out.println(Season2.SPRING.name());
//ordinal:返回对象的编号,整型数据
int i = Season2.SPRING.ordinal();
System.out.println(Season2.SPRING.ordinal());
//compareTo:比较两个枚举常量,比较的是编号,返回的是调用该方法的编号减去作为实参引入的另一个枚举常量的编号
int n = Season2.SPRING.compareTo(Season2.WINTER);
System.out.println(Season2.SPRING.compareTo(Season2.WINTER));
//values:以数组形式返回当前枚举类的所有常量
Season2[] values = Season2.values();
for (Season2 season2:values){ //增强for循环
System.out.print(season2.ordinal() + "\t");
}
System.out.println();
//valueOf:将字符串转换成枚举对象,要求该字符串必须为已有的枚举常量名,否则报异常
Season2 fall = Season2.valueOf("AUTUMN");
System.out.println(fall.ordinal());
System.out.println(fall==Season2.AUTUMN); //true,表明这是同一个对象
【enum还有一些细节】
(1)使用enum实现的枚举类,不能再继承其他类(因为单继承机制,它已继承Enum类)
(2)enum类和普通类一样,可以实现接口