枚举enum


1、常量的集合


2、可以理解为枚举是一种特殊的类,里面包含一组有限的特定对象。



自定义类实现枚举:


(1)把构造器私有化,set方法注销,只允许读数据。


(2)对枚举对象使用public static final共同修饰,实现底层化。


(3)枚举对象名通常使用全部大写,常量的命名规范。


(4)   枚举对象根据需要,可以有多个属性(春天、温暖)。


public class enum02 {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
    }
}
class Season{
    private String name;
    private String desc;
//定义四个对象 固定
    public static final Season SPRING = new Season("春天", "温暖");
    public static final Season WINTER = new Season("冬天", "寒冷");
    public static final Season SUMMER = new Season("夏天", "炎热");
    public static final Season AUTUMN= new Season("秋天", "凉爽");

    private Season(String name, String desc) {
         = name;
        this.desc = desc;
    }


    public String getName() {
        return name;
    }


    public String getDesc() {
        return desc;
    }


    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}


enum关键字实现枚举:


1、 使用enum替代class


2、public static final Season SPRING = new Season("春天", "温暖");直接使用


     SPRING("春天", "温暖")解读   常量(实参列表)


3、如果有多个常量(对象),使用逗号间隔即可


4、如果使用enum来实现枚举,要求将定义常量对象,写在前面,属性写在后面


public class enum03 {
    public static void main(String[] args) {
        System.out.println(Season2.SPRING);
    }
}
enum Season2 {

    SPRING("春天", "温暖"),
    WINTER("冬天", "寒冷"),
    SUMMER("夏天", "炎热"),
    AUTUMN("秋天", "凉爽");
    private String name;
    private String desc;


    private Season2(String name, String desc) {
         = name;
        this.desc = desc;
    }
    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}



使用关键字enum注意事项:


1、使用enum关键字开发枚举时,会默认继承Enum类,而且是finnal类。


2、传统的public static final Season SPRING = new Season("春天", "温暖");直接使用


     SPRING("春天", "温暖");要知道调用的时那个构造器(2个参数构造器)。


3、如果使用无参构造器创建枚举对象,则实参列表和小括号可以省略(BOY,GRIL),以下是对的。


enum Gender{


        BOY,GIRL;


        private static Gender(){};


}



父类Enum 中各种方法:(另外补充:增强for循环)


public class EnumMethod {
    public static void main(String[] args) {
        Season2 autumn = Season2.AUTUMN;
        //name()输出枚举对象名称
        System.out.println(());
        //ordinal()输出该枚举对象次序/编号,从0开始编号
        System.out.println(autumn.ordinal());
        //values(),返回Season2[],含有定义的所有枚举对象
 

        Season2[] values = Season2.values();
        System.out.println("遍历取出枚举对象");
        for(Season2 season2:values){//增强For循环
            System.out.println(season2);
        }
        //valueof(),将字符串转换成枚举对象,要求字符串必须是已有的常量名,否则报异常
        //根据你输出的"AUTUMN"到Season2的枚举对象中去找
        //如果找到了就返回,没有找到就报错
        Season2 autumn1 = Season2.valueOf("AUTUMN");
        System.out.println(autumn1);
        //1、把Season2.AUTUMN和Season2.SUMMER编号进行比较
        //2、Season2.AUTUMN[2]-Season2.SUMMER[3],比较谁前谁后
        System.out.println(Season2.AUTUMN.compareTo(Season2.SUMMER));
        //toString(),Enum类中是返回name,及对象名,一般应用枚举类中会重写。
//        System.out.println("=====普通for=====");
//        int[] arr ={1,2,3};
//        for(int i = 0; i< arr.length; i++){
//            System.out.println(arr[i]);
//        }
//        System.out.println("====增强for=====");
//        for (int i : arr) {    //快捷键  对象名.for
//            //依次从arr数组中取出数据赋给i
//            System.out.println(i);
//
//        }


    }
}


Enum使用细节:


1、使用Enum关键字后不能在继承其他类了,因为它已经继承了Java.Long.Enum类,而java是单继承机制


2、枚举和普通类一样,可以实现接口


enum 类名 implements 接口1,接口2{}