枚举类笔记

一、枚举类(enumeration):可以把枚举理解为一种特殊的类,里面包含了一组有限的特定的集合。

二、为什么要引入枚举:对于一些固定的对象,例如每周有七天,每年有四个季节等情况。因为这些对象本身就带有确定性和固定性,因此可以选择将这些对象封装到一个类中方便使用以及方便管理,避免这些对象在使用时还得重新创建,比较优雅。

三、枚举类的两种实现方式

1.不使用enum关键字实现枚举

① 将构造器私有化

② 在该类内部创建一组对象,并把这些对象使用(public static final)修饰对外暴露。

③ 可以为类中属性提供get方法,但是不能提供set方法。

package cn.lit.enum_;

public class Enumeration02 {
        public static void main(String[] args) {
            System.out.println(Season.SPRING);
        }
    }
    class Season{
        private String name;
        private String desc;

        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("冬天","寒冷");

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

        public String getName() {
            return name;
        }

        public String getDesc() {
            return desc;
        }

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

2.使用enum关键字实现枚举(本质上还是第一种,只不过对其进行了简化,看起来比较优雅)

① 使用enum关键字来代替class

② 构造器私有化

③ 用 常量对象名(“属性1”,“属性2”...)替换自定义枚举时创建对象时的(public static final ...)

④ 可以使用get方法,不能使用set方法

package cn.lit.enum_;

public class Enumeration03 {
    public static void main(String[] args) {
        System.out.println(Season03.SPRING);

    }
}
enum Season03{
    SPRING("春天","温暖"),
    SUMMER("夏天","炎热"),
    AUTUMN("秋天","凉爽"),
    WINTER("冬天","寒冷");

    private String name;
    private String desc;

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

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

1.当使用enum关键字开发一个枚举类时,默认会继承Enum类(可以通过反编译查看)。

2. 要清楚的知道SPRING(“春天”,“温暖”)调用的是哪个构造器,看他的参数个数,以及参数类型。

3. 当使用无参构造器创建枚举对象时,实参列表和小括号都可以省略。

4.当有多个枚举对象时,枚举对象之间用“,”隔开,最后一个枚举对象带上“;”

5. 枚举对象必须放在枚举类的行首。

6. 使用了enum关键字以后就不能再使用继承了,因为java为单继承机制。

7. 枚举类和普通类一样,可以实现接口。

五、Enum类常用方法

1. name()  得到当前枚举对象的常量名称

2.ordinal() 返回枚举常量在enum声明中的位置,位置从0开始计数。

3.values() 隐藏的静态方法,返回该枚举类中的枚举对象数组。

4.将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常

 5. compareTo() 比较两个枚举对象,比较的就是编号,返回值为编号值相减。

6. tostring() 返回当前枚举对象的常量名称,子类继承可以重写让其返回对象的属性。

package cn.lit.enum_;

/**
 * Enum类的常用方法
 */
public class EnumMethod {
    public static void main(String[] args) {
        Season04 autumn = Season04.AUTUMN;
        //name()  输出枚举对象的常量名称
        System.out.println(autumn.name());

        //ordinal()   输出该枚举对象的次序/编号,从0开始编号
        System.out.println(autumn.ordinal());

        //values()   返回该枚举类中的枚举对象数组
        Season04[] values = Season04.values();
        for (Season04 value : values) {
            System.out.println(value);
        }

        //valueOf  将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常
        //根据你输入的"AUTUMN"到Season04的枚举对象中去查找
        //如果找到了就返回该对象,否则就报错
        Season04 autumn1 = Season04.valueOf(Season04.class,"AUTUMN");
        System.out.println(autumn1);

        //compareTo() 比较两个枚举常量,比较的就是编号,返回值为编号值相减
        //返回值为Season04.AUTUMN的编号值-Season04.SPRING的编号值
        System.out.println(Season04.AUTUMN.compareTo(Season04.SPRING));

    }
}
enum Season04{
    SPRING("春天","温暖"),
    SUMMER("夏天","炎热"),
    AUTUMN("秋天","凉爽"),
    WINTER("冬天","寒冷");

    private String name;
    private String desc;

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值