@

一、枚举类简介

  1. 类的对象确定且有限,就成为枚举类。
  2. 当需要定义一组常量时,使用枚举类。
  3. 如果枚举类只有一个对象,则可以作为单例模式的实现方式

二、自定义枚举类

1、方式一:jdk5.0之前,自定义枚举类

  1. 代码实现

    class Season{
        //1.属性要定义为 private final的
        private final String seasonName;
        private final String seasonDesc;
    
        //2.构造器私有化(因为属性是final的,所以要在构造器中初始化)
        private Season(String seasonName, String seasonDesc){
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    
        //3. 提供当前枚举类的几个对象,并声明为public static final
        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("冬天","我是冬天");
    }
    

2、方式二:jdk5.0,用enum关键字定义枚举类

  1. 代码实现

    enum Season1{
                //1.提供枚举类的对象
                SPRING("春天","我是春天"),
                SUMMER("夏天","我是夏天"),
                AUTUMN("秋天","我是秋天"),
                WINTER("冬天","我是冬天");
    
    
                //2.定义属性,声明为private final
                private final String seasonName;
                private final String seasonDesc;
    
                //3.私有化构造器,并给对象赋值
                private Season1(String seasonName, String seasonDesc){
                    this.seasonName = seasonName;
                    this.seasonDesc = seasonDesc;
                }
    
                //4.额外需求:get()方法
    
                public String getSeasonName() {
                    return seasonName;
                }
    
                public String getSeasonDesc() {
                    return seasonDesc;
                }
    }
    
  2. 说明

    1. 枚举类的对象在第一行声明,用逗号分隔,分号结尾。不用自己加 public static final,因为系统会自动添加。也不用加new + 构造器来创建。
    2. enum定义的枚举类默认继承 java.lang.Enum类,因此不能再继承其他类。可以通过

三、Enum类的主要方法

1、toString()

  1. 返回当前枚举类对象的名字。
  2. 默认输出对象和调用toString是一样效果

2、values()

  1. 静态方法
  2. 返回枚举类型的对象数组,可以方便的遍历所有枚举值。

3、valueOf(String str)

  1. 静态方法
  2. 把一个字符串转换为对应的枚举类对象。
  3. 名字必须一致,否则会出异常: IllegalArgumentException: No enum constant com.lzx.java.Season1.spring

四、使用enum关键字定义的枚举类去实现接口

1、情况一

  • 实现接口,在enum类中实现抽象方法即可

2、情况二:

  • 每个对象分别去实现抽象方法,则不同的对象调用各自实现的抽象方法。
11-20 07:21