您当前的位置: 首页 >  Java

慕晨sekurlsa

暂无认证

  • 4浏览

    0关注

    82博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JAVA基础(二十五)——枚举

慕晨sekurlsa 发布时间:2022-08-21 19:49:54 ,浏览量:4

一、目录
  • 枚举介绍
  • 自定义类实现枚举
  • enum关键字实现枚举
  • Enum类常用方法
  • enum实现枚举练习
  • enum实现枚举细节
二、枚举介绍

枚举是一组常量的集合。 可以理解为:枚举属于一种特殊的类,里面只包含了一组有限的特定的对象。

枚举的实现方式有两种:

  1. 自定义类实现枚举
  2. 使用系统提供的enum关键字实现枚举
三、自定义类实现枚举
  1. 不需要提供setXxx方法,因为枚举对象值通常为只读。
  2. 对枚举对象/属性使用 final + static 共同修饰,实现底层优化。
  3. 枚举对象名通常使用全部大写,常量的命名规范。
  4. 枚举对象根据需要,也可以有多个属性。
package com.enumclass;

public class EnumSeasons {
    public static void main(String[] args) {
        System.out.println(Seasons.AUTOMN);

    }
}

class Seasons{
    private String name;
    private String desc;

    //将构造器私有化,目的就是不让直接new出来这个类,信息不会被修改。
    private Seasons(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    //定义四个对象
    public final static Seasons SPRING = new Seasons("Spring", "Warm");
    public final static Seasons SUMMER = new Seasons("Summer", "Hot");
    public final static Seasons AUTOMN = new Seasons("Automn", "Comfortable");
    public final static Seasons WINTER = new Seasons("Winter", "Cold");

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

//Seasons{name='Automn', desc='Comfortable'}

特点:

  1. 构造器私有化。
  2. 本类内部创建一组对象。
  3. 对外暴露对象(通过为对象添加public final static修饰符)。
  4. 可以提供get方法,但是不要提供set方法。
四、enum关键字实现枚举
  1. 使用关键字enum替代class。

  2. 使用常量名(形参列表)。

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

  4. 如果使用enum来实现枚举,要求将定义的常量对象写在最前面。

  5. 当我们使用enum关键字实现枚举类时,默认会继承Enum类。而且我们写的类还是个final类。 在这里插入图片描述

  6. 如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略。例如SUMMER;

package com.enumclass;

public class UseEnum {
    public static void main(String[] args) {
        System.out.println(UseEnumSeasons.AUTOMN);
        System.out.println(UseEnumSeasons.SPRING);
    }
}

enum UseEnumSeasons{

    SPRING("Spring", "Warm"), SUMMER("Summer", "Hot"),
    AUTOMN("Summer", "Hot"), WINTER("Winter", "Cold");

    private String name;
    private String desc;

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


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

//Seasons{name='Summer', desc='Hot'}
//Seasons{name='Spring', desc='Warm'}
五、Enum类常用方法

在这里插入图片描述

package com.enumclass;

public class UseEnum {
    public static void main(String[] args) {
        UseEnumSeasons season = UseEnumSeasons.AUTOMN;
        UseEnumSeasons winter = UseEnumSeasons.WINTER;
        //输出枚举对象的名字
        System.out.println(season.name());
        //输出枚举对象的次序,从0开始
        System.out.println(season.ordinal());
        //枚举出定义的所有对象,这个方法反编译可以看到
        UseEnumSeasons[] values = UseEnumSeasons.values();
        for(UseEnumSeasons seasons : values){ //增强for循环
            System.out.println(seasons);
        }
        //valueOf:将字符串转换成枚举对象,要求字符串必须是已有的常量名,否则报异常
        //执行流程
        //1. 根据输入的字符串,到类的枚举对象去寻找
        //2. 如果找到了就返回,没有找到就异常。
        UseEnumSeasons seasons = UseEnumSeasons.valueOf("SPRING");
        System.out.println(seasons);
        //compareTo:比较两个枚举常量,比较的就是编号
        System.out.println(season.compareTo(winter));
    }
}

enum UseEnumSeasons{

    SPRING("Spring", "Warm"), SUMMER("Summer", "Hot"),
    AUTOMN("Summer", "Hot"), WINTER("Winter", "Cold");

    private String name;
    private String desc;

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


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

AUTOMN
2
Seasons{name='Spring', desc='Warm'}
Seasons{name='Summer', desc='Hot'}
Seasons{name='Summer', desc='Hot'}
Seasons{name='Winter', desc='Cold'}
Seasons{name='Spring', desc='Warm'}
-1
六、enum实现枚举练习

声明Week枚举类,其中包含星期一至星期日的定义。使用values返回所有的枚举数组,并遍历。

package com.enumclass;

public class Week {
    public static void main(String[] args) {
        GoWeek[] values = GoWeek.values();
        for(GoWeek days : values){
            System.out.println(days);
        }

    }
}

enum GoWeek{

    MONDAY("This is Monday"),
    TUESDAY("This is Tuesday");

    private String desc;

    GoWeek(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return desc;
    }
}

//This is Monday
//This is Tuesday
七、enum实现枚举细节
  1. 使用enum关键字后,就不能再继承其他类了,因为enum会隐式的继承Enum类,而Java是单继承机制。
  2. 枚举类和普通类一样,可以实现接口,形式如下: enum 类名 implements 接口1, 接口2{…}
关注
打赏
1663680270
查看更多评论
立即登录/注册

微信扫码登录

0.0454s