了解enum枚举类

目录

1、自定义枚举

        1、自定义枚举实现枚举

        2、进行自定义类实现枚举,如下特点:       

2、enum关键字

        1、enum关键字实现枚举注意事项

        2、enum类的成员方法


1、自定义枚举

        1、自定义枚举实现枚举

                1.2、不需要提供set方法,因为枚举对象值一般只读。

                1.3、对枚举对象/属性使用static + final共同修饰,实现底层优化。

                1.4、枚举对象名通常也全部大写,常量命名规范。

                1.5、枚举对象根据需要,也可以有多个属性

        2、进行自定义类实现枚举,如下特点:       

                2.1、构造器私有化

                2.2、本类内部创建一组对象

                2.3、对外暴露对象(通过给对象添加public static final修饰符)

                2.4、可以提供get方法,但不要提供set方法

(自定义实现枚举类,还没使用enum)
class Color{
    private String name;

    //1、构造器私有化,防止外部其他类创建对象
    //2、去掉setXXX方法,防止修改
    //3、创建对象

    public static final Color yellow = new Color("黄色");
    public static final Color red = new Color("红色");
    public static final Color green = new Color("绿色");
    //等等...
    private Color(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

2、enum关键字

        1、enum关键字实现枚举注意事项

                1.1、当我们使用enum关键字开发一个枚举类时,默认会继承enum类,而且是一个final类[如何证明],可以用javap工具来演示(javap就是反编译:idea自带,直接用idea打开编译后的.class文件)

                1.2、传统的public static final Season2 SPRING = new Season2("春天", "温暖");简化成SPRING("春天", "温暖"),这里必须知道,它调用的是哪个构造器.

                1.3、如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略

                1.4、当有多个枚举对象时,使用,间隔,最后由个分号结尾

                1.5、枚举对象必须放在枚举类的行首

enum Time{  //此处默认继承enum

    SPRING("春季","万物复苏"),AUTUMN("秋季","黄叶"),
    SUMMER("夏季","炎热"),WINTER("冬季","寒冷");

    private final String season;
    private final String depict;

    private Time(String season, String depict){
        this.depict = depict;
        this.season = season;
    }

    @Override
    public String toString() {
        return "Time{" +
                "season='" + season + '\'' +
                ", depict='" + depict + '\'' +
                '}';
    }
}

        2、enum类的成员方法

                2.1、toString:Enum类已经重写过了,返回的是当前对象名子类可以重写该方法,用于返回对象的属性信息

                2.2、name:返回当前对象名(常量名) ,子类中不能重写

                2.3、ordinal:返回当前对象的位置号,默认从0开始

                2.4、values:返回当前枚举类中所有的常量

                2.5、valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!

                2.6、compareTo:比较两个枚举常量,比较的就是编号!

/**
 * enum类的成员方法
 */
public class EnumerationMember {

    public static void main(String[] args){
        //1、toString:Enum类已经重写过了,返回的是当前对象名子类可以重写该方法,
            用于返回对象的属性信息
        System.out.println(Time.SUMMER.toString());//一般是隐式调用,toString()可以不写

        //2、name:返回当前对象名(常量名) ,子类中不能重写
        System.out.println(Time.SUMMER.name());//SUMMER

        //3、ordinal:返回当前对象的位置号,默认从0开始
        System.out.println(Time.SPRING.ordinal());//0

        //4、values:返回当前枚举类中所有的常量
        for (Time time : Time.values()){
            System.out.println(time);
        }

        //5、valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!
        Time.valueOf("SPRING");

        //6、compareTo:比较两个枚举常量,比较的就是编号!
        System.out.println(Time.AUTUMN.compareTo(Time.SUMMER));//-1
        System.out.println(Time.WINTER.compareTo(Time.SPRING));//3

    }
}

代码输出:

Time{season='夏季', depict='炎热'}
SUMMER
0
Time{season='春季', depict='万物复苏'}
Time{season='秋季', depict='黄叶'}
Time{season='夏季', depict='炎热'}
Time{season='冬季', depict='寒冷'}
-1
3


版权声明:本文为qq_57887050原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。