枚举
枚举
一组被命名的整数集合,用于声明一组带标识符的常数。
eg,性别、一周的星期几
声明枚举
public enum enumname:基础数据类型{
enum-body;
}
任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。
提示:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。
例1:
public enum SexEnum {
female,male;
}
public enum Color {
blue,yellow,RED,BLACK;
}
之后便可以通过枚举类型名直接引用常量,如 SexEnum.male、Color.RED。
使用switch
enum Signal{
GREEN,RED,YELLOW;
}
public class TrafficLight{
Signal color = Signal.RED;
public void change(){
switch(color){
case RED:
color = Signal.GREEN;
break;
case GREEN:
color = Signal.YELLOW;
break;
case YELLOW:
color = Signal.RED;
break;
}
}
}
上面的通常的使用!接下来好戏才开始。
枚举的定义
我们使用了enum关键字,实际上,里面隐含了所创建的类型都是java.lang.Enum的子类,(java.lang.Enum是一个Abstract类)
枚举类型符合通用模式Class Enum<E extends EnumE 表示枚举类型的名称。
枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。
package com.hmw.test;
public enum EnumTest {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
这段代码实际上调用了7次 Enum(String name, int ordinal):
new Enum<EnumTest>("MON",0);
new Enum<EnumTest>("TUE",1);
new Enum<EnumTest>("WED",2);
遍历、switch 等常用操作
enum 对象的常用方法介绍
int ``**compareTo**(E o)
比较此枚举与指定对象的顺序。
Class<E> ``**getDeclaringClass**()
返回与此枚举常量的枚举类型相对应的 Class 对象。
String ``**name**()
返回此枚举常量的名称,在其枚举声明中对其进行声明。
int ``**ordinal**()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String ``**toString**()
返回枚举常量的名称,它包含在声明中。
static <T extends Enum<T>> T ``**valueOf**(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
package EnumDemo;
public class Demo2 {
public static void main(String[] args) {
DayOfTheWeek day = DayOfTheWeek.THURSDAY;
// o1.compareTo(E o)
// 返回o1-o的值(o1,和o所在索引之差)
System.out.println(day.compareTo(DayOfTheWeek.FRIDAY));
if (day.compareTo(DayOfTheWeek.FRIDAY) > 0) {
System.out.println("在星期五之后");
} else if (day.compareTo(DayOfTheWeek.FRIDAY) < 0) {
System.out.println("在星期五之前");
} else {
System.out.println("恰好是星期五");
}
System.out.println("getDeclare" + day.getDeclaringClass());
System.out.println(day.getDeclaringClass().getName());
System.out.println(day.name());
System.out.println(day.ordinal());
System.out.println(DayOfTheWeek.valueOf(DayOfTheWeek.class,"FRIDAY"));
}
}
给 enum 自定义属性和方法
给 enum 对象加一下 value 的属性和 getValue() 的方法:
也就是说,enum里面的数据,都自动添加一个value,类似ArrayList。
总结
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。

浙公网安备 33010602011771号