Java-枚举

151 阅读2分钟

1、enum关键字声明枚举

某些类型的对象是有限的几个,这样的例子举不胜举:

  • 星期:Monday(星期一)......Sunday(星期天)
  • 性别:Man(男)、Woman(女)
  • 月份:January(1月)......December(12月)
  • 季节:Spring(春节)......Winter(冬天)

Java中:枚举类型本质上也是一种类,只不过是这个类的对象是固定的几个,而不能随意让用户创建。

枚举类的要求和特点:

  • 枚举类的常量对象列表必须在枚举类的首行,因为是常量,所以建议大写。
  • 编译器给枚举类默认提供的是private的无参构造,如果枚举类需要的是无参构造,就不需要声明,写常量对象列表时也不用加参数,
  • 如果枚举类需要的是有参构造,需要手动定义,有参构造的private可以省略,调用有参构造的方法就是在常量对象名后面加(实参列表)就可以。
  • 枚举类默认继承的是java.lang.Enum类,因此不能再继承其他的类型。
  • JDK1.5之后switch,提供支持枚举类型,case后面可以写枚举常量名。
  • 枚举类型如有其它属性,建议(不是必须)这些属性也声明为final的,因为常量对象在逻辑意义上应该不可变。
【修饰符】 enum 枚举类名{
    常量对象列表;
    
    其他成员列表;
}
public class TestEnumType {
    public static void main(String[] args) {
        //获取今天的星期,今天是星期六
        Week today = Week.SATURDAY;
        System.out.println(today);
        
        switch (today){
            case MONDAY:
                System.out.println("星期一是最困的一天");break;
            case TUESDAY:
                System.out.println("星期二是接着困的一天");break;
            case SATURDAY:
                System.out.println("星期六是最开心的一天,因为第二天休息了");break;

        }
    }
}
public enum Week {
    MONDAY,//表示使用无参构造创建的对象
    TUESDAY("星期二"), //表示使用有参构造创建的对象
    WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;

    private final String description;//final是建议,不是必须

    Week(){//这里是省略了private,和普通的类有点不同
//        System.out.println("无参构造");
        description = "";
    }

    Week(String description) {
//        System.out.println("有参构造");
        this.description = description;
    }
}