枚举的定义
将一个一个的具体固定的对象在类中实例化列举出来的类就叫作枚举类。这些在枚举类中实例化的对象一定是具体固定的。枚举类是一种常量的集合,可以理解为:枚举属于一种特殊的类,里面只包含一组特定的对象。
枚举的种类
枚举类分为两种:一种是自定义枚举类,一种是使用关键字 enum 定义的类。
自定义枚举类
创建步骤
-
将构造器私有化,不让用户随意调用
-
去掉 set 方法,不让用户随意修改,保留 get 方法
-
在类的内部,直接创建具体固定的对象(用 static 去修饰)
-
利用 final 去进一步修饰,在底层会进一步优化
代码演示
//演示自定义类枚举 class Season02{ private String name; private String desc; //自定义类实现枚举 public final static Season02 SPRING = new Season02("春天", "万物复苏"); public final static Season02 SUMMER = new Season02("夏天", "是真的热"); public final static Season02 AUTUMN = new Season02("秋天", "飒爽又悲凉"); public final static Season02 WINTER = new Season02("冬天", "这里的冬天没有雪"); private Season02(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season02{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } }
Enum 创建枚举类
创建步骤
-
在创建类时,利用 enum 代替 class
-
public final static Season02 SUMMER = new Season02("夏天","是真的热") 直接使用 SUMMER("夏天","是真的热");
-
如果有多个常量,就用逗号进行间隔,在最后一个常量写完后用分号表示语句结束即可
-
使用 enum 定义枚举时,需要将定义的常量对象写在最前面
代码演示
//演示用enum实现枚举 enum Season04{ SPRING("春天", "万物复苏"), SUMMER("夏天", "是真的热"), AUTUMN("秋天", "飒爽又悲凉"), WINTER("冬天", "这里的冬天没有雪"); private String name; private String desc; private Season04(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season02{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } }
Enum 常用方法
1、对象.name 方法
该方法返回对象的名字
Season04 summer = Season04.SUMMER; System.out.println("summer对象名"+summer.name());
2、对象.ordinal 方法
该方法返回枚举对象在枚举类中定义的次序/编号,在枚举类中所有对象的编号从0开始
System.out.println("summer的编号"+summer.ordinal());
3、类名.values 方法
该方法以数组的形式返回枚举类中定义的所有枚举对象
Season04[] values = Season04.values(); System.out.println("======values中的内容"); for (Season04 season04:values){ System.out.print(season04+"\t"); }
4、类名.valueOf("string") 方法
该方法能将输入的字符串传化为枚举对象,但是输入的字符串必须是枚举类中已有的常量名,否则将会报错
Season04 summer1 = Season04.valueOf("SUMMER"); System.out.println(summer1);
5、枚举常量.compareTo(枚举常量) 方法
该方法用于将两个枚举常量的编号进行比较,返回两个枚举常量的编号差值
System.out.println(Season04.SPRING.compareTo(Season04.AUTUMN));
Enum 使用细节
-
使用 enum 关键字后,就不能在继承其它类了,因为 enum 会隐式继承 Enum,但是 Java 是单继承机制的。
-
枚举类可以去实现接口,且实现形式和其它普通类一样。