为什么需要学习枚举?
简化代码
提高了可读性
作为 switch语句的类型使用
枚举定义:
表示在一定范围内取值,并且只能够取其中一个,本质就是** 构造方法私有**,成员都是常量的Java抽象类
// 枚举的本质
class Weekend {
private Weekend() {}
public static final Weekend MONDAY = new Weekend();
public static final Weekend TUESDAY = new Weekend();
public static final Weekend WEDNESDAY = newWeekend();
}
// 版本四 : 枚举类型
enum Game4 {
START, RUNNING, OVER
}
因为枚举是抽象类,所以MONDAY等是枚举的子类,实现了枚举的抽象方法
enum Weekend {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATUARDAY, SUNDAY
}
枚举的特点:
- 1.枚举既然本质是一个Java类,那么枚举当中可以不可以有 成员变量, 成员方法, 构造方法, 静态方法, 抽象方法? 有的话有意义吗? - 没有意义
枚举的应用
enum Game{
START,RUNNING,OVER
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Game status=Game.START;
switch(status){
case START:
System.out.println("begin.....");
break;
case RUNNING:
System.out.println("loading.....");
break;
case OVER :
System.out.println("gameover.....");
break;
default:
break;
}
}
set枚举
- EnumSet底层实现是枚举数组,效率高
- 枚举是天然线程安全的
灵活的枚举:
//添加所有:
EnumSet<Weekend> es = EnumSet.allOf(Weekend.class);
System.out.println(es);
//添加一部分:
es.add(Weekend.WEDNESDAY);
es.add(Weekend.FRIDAY);
es.add(Weekend.THURSDAY);
es.add(Weekend.SUNDAY);
Map枚举
只利用一部分枚举
EnumMap<Weekend, String> em = new EnumMap<>(Weekend.class);
em.put(Weekend.MONDAY, "星期一");
em.put(Weekend.THURSDAY, "星期四");
em.put(Weekend.FRIDAY, "星期五");
em.put(Weekend.SUNDAY, "星期天");
em.put(Weekend.WEDNESDAY, "星期三");
System.out.println(em);
//{MONDAY=星期一, WEDNESDAY=星期三, THURSDAY=星期四, FRIDAY=星期五, SUNDAY=星期天}