四、枚举类型

第四节:枚举类型

 
 
1.枚举(enum全称为enumeration)类型是Java 5新增的类型,存放在java.lang包中,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。
2.基本方法:values():返回 enum 实例的数组,而且该数组中的元素严格保持在 enum 中声明时的顺序
                    name():返回实例名。
                    ordinal():返回实例声明时的次序,从0开始。
                    getDeclaringClass():返回实例所属的 enum 类型。
                    equals() :判断是否为同一个对象。可以使用 == 来比较enum实例。
3.应用:public enum WeekDayEnum{
                    MONDAY,
                   TUESDAY,
                   WENDESDAY,
                   FRIDAY,
                   SATURDAY,
                   SUNDAY;
               }
            WeekDayEnum mondayEnum = WeekDayEnum.MONDAY;
            Systen.out.println(mondayEnum);
            //输出: MONDAY
   在java5之前, switch 的值只能够是简单类型,比如 int、byte、short、char, 有了枚举类型之后,就可以使用对象了。
   switch(mondayEnum){
      case MONDAY: 
                Systen.out.println( WeekDayEnum.MONDAY);
   }
4.遍历:使用values()方法,讲枚所有元素转换为数组
 
5.枚举定制:
   Java枚举中允许定义属性和方法,但必须在枚举实例序列的最后一个分号后再添加。Java 要求必须先定义枚举实例在前面。
   注意:枚举的构造方法默认且只能是private的。
6.父类Enum中的定义的方法只有toString方法没有使用final修饰,因此只能覆盖toString方法。
7.由于Java单继承的原因,enum类并不能再继承其它类,但并不妨碍它实现接口,因此enum类同样是可以实现多接口的。
   因为父类enum已经继承了,java.lang.Enum,类中可以定义抽象方法,实现一到多个接口,可以定义方法和属性。
8.使用枚举单例的优势:1.自由序列化
  枚举单例是饿汉式的    2.保证只有一个实例(即使使用反射机制也无法多次实例化一个枚举量)
                                    3.线程安全
EnumMap:
          
 
EnumSet
使用规范:
1.枚举类型对象之间的值比较,可以使用==直接来比较值是否相等的,不是必须使用equals方法。由于 enum 类型的值实际上是通过运行期构造出对象来表示的,每个虚拟机都会构造出一个同义的枚举对象。因而在做比较操作时候就需要注意,如果直接通过使用等号 ( ‘ == ’ ) 操作符,这些看似一样的枚举值一定不相等,因为这不是同一个对象实例。
2.enum 类型不支持 public 和 protected 修饰符的构造方法,因此构造函数一定要是 private 或 friendly 的。也正因为如此,所以枚举对象是无法在程序中通过直接调用其构造方法来初始化的。 
2.定义 enum 类型时候,如果是简单类型,那么最后一个枚举值后不用跟任何一个符号;但如果有定制方法,那么最后一个枚举值与后面代码要用分号';'隔开,不能用逗号或空格。 
 
 
缺点:相对于普通的常量会占用更多的内存。
优点:将常量组织起来统一进行管理。
 
 
 
 
 
 
 
 
 
posted @ 2018-09-06 13:41  z西梅  阅读(824)  评论(0编辑  收藏  举报