枚举的作用:
用于标志和分类
格式:
修饰符 enum 枚举名称{
第一行都是罗列枚举实例的名称。
}
枚举类反编译以后源代码:
public final class Season extends java.lang.Enum<Season> {
public static final Season SPRING = new Season();
public static final Season SUMMER = new Season();
public static final Season AUTUMN = new Season();
public static final Season WINTER = new Season();
public static Season[] values();
public static Season valueOf(java.lang.String);
}
从反编译的代码可以看出,枚举的底层实际上是已经实例化的常量
枚举的特点
- 枚举类是用final修饰的,枚举类不能被继承!
- 枚举类默认继承了java.lang.Enum枚举类。
- 枚举类的第一行都是常量,存储都是枚举类的对象。
- 枚举类的第一行必须是罗列枚举类的实例名称。
所以:枚举类相当于是多例设计模式。
枚举的常用API:
- 获取当前类的全部枚举实例 : public static Season[] values()
- 获取枚举对象的索引: ordinal()
- 获取枚举对象:枚举类.枚举
- 用枚举名称点出枚举的字符串名称。 String name() (个人感觉没啥用)
- 用枚举的字符串名称点出枚举的变量名:static <T extends Enum> T valueOf(Class enumType, String name) (个人感觉还是没什么用)
枚举的使用:
定义枚举
public enum Orientation {
UP , DOWN , LEFT , RIGHT;
}
人物移动案例
public class EnumDemo {
public static void main(String[] args) {
move(Orientation.UP);
move(Orientation.DOWN);
move(Orientation.LEFT);
move(Orientation.RIGHT);
System.out.println(Orientation.UP.name());//输出结果:UP
System.out.println(Orientation.valueOf("UP"));//输出结果:UP
}
public static void move(Orientation o){
switch (o){
case UP:
System.out.println("玛丽奥往↑移动");
break;
case DOWN:
System.out.println("玛丽奥往↓移动");
break;
case LEFT:
System.out.println("玛丽奥往←移动");
break;
case RIGHT:
System.out.println("玛丽奥往→移动");
break;
}
}
枚举的好处
枚举写在方法的形参上,限定了传入的只能是枚举类型,这样我们就不能够随便传参数,只能传枚举定义好的参数