JavaSE11: 简单快速掌握枚举

写在前面

常用类学完之后,接下来就是枚举和注解了,枚举比较简单,注解在JavaSE也比较简单,但由于部分内容涉及反射,就先更新枚举了,反射学完再回来写注解

什么时候需要枚举

当需要定义一组常量时,强烈建议使用枚举类

在这里插入图片描述

枚举类如何实现

1.JDK1.5之前需要自定义枚举类
2.JDK 1.5 新增的 enum 关键字用于定义枚举类
3.若枚举只有一个对象, 则可以作为一种单例模式的实现方式。

枚举类的属性

1.枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰
2.枚举类的使用 private final 修饰的属性应该在构造器中为其赋值
3.若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数

自定义枚举类

在前面项目三的时候,已经接触到了自定义枚举类,当时是用来描述员工的状态

步骤

1. 私有化类的构造器,保证不能在类的外部创建其对象
2. 在类的内部创建枚举类的实例。声明为:public static final
3. 对象如果有实例变量,应该声明为private final,并在构造器中初始化

demo

package com.deserts;

public class EnumDemo01 {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.AUTUMN);
        System.out.println(Season.WINTER);
    }
}
class Season{
    
    
    //3. 对象如果有实例变量,应该声明为private final,并在构造器中初始化
    private final String SEASONNAME;
    private final String SEASONDESC;
    //1. 私有化类的构造器,保证不能在类的外部创建其对象
    private Season(String SEASONNAME, String SEASONDESC){
    
    
        this.SEASONNAME = SEASONNAME;
        this.SEASONDESC = SEASONDESC;
    }
    //2. 在类的内部创建枚举类的实例。声明为: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("冬天", "冰天雪地");

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

运行结果
在这里插入图片描述

使用enum定义枚举类

使用说明

1.使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再继承其他类
2.枚举类的构造器只能使用 private 权限修饰符
3.枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的实例系统会自动添加 public static final 修饰
4.必须在枚举类的第一行声明枚举类对象
5.JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定。

demo

package com.deserts.demo02;

public class EnumDemo02 {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.AUTUMN);
        System.out.println(Season.WINTER);
    }
}
enum Season{
    
    
    SPRING("春天","春风又绿江南岸"),
    SUMMER("夏天","映日荷花别样红"),
    AUTUMN("秋天","秋水共长天一色"),
    WINTER("冬天","窗含西岭千秋雪");
    private final String seasonName;
    private final String seasonDesc;
    private Season(String seasonName, String seasonDesc){
    
    
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

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

运行结果
在这里插入图片描述

Enum类

前面我们知道使用关键字enum创建的枚举类默认继承 java.lang.Enum类,在知道怎么创建枚举类之后,我们还需要了解Enum类,这样才能用的更好

简单介绍

在这里插入图片描述

常用方法

在这里插入图片描述
在这里插入图片描述这些方法都比较简单,Enum类的源码也只有200多行。感兴趣的朋友可以去看看,最主要的是在枚举类中会使用这些方法

枚举类实现接口

简单描述

与其它类一样,枚举类可以实现一些接口,并在类内实现抽象方法,不同的是,在每个枚举值下可以实现各自的抽象方法,以达到个性化

demo

package com.deserts.demo02;

public class EnumDemo02 {
    
    
    public static void main(String[] args) {
    
    
        Season.SPRING.show();
        Season.SUMMER.show();
        Season.AUTUMN.show();
        Season.WINTER.show();
    }
}
interface Show{
    
    
    void show();
}
enum Season implements Show{
    
    
    SPRING("春天","春风又绿江南岸"){
    
    
        @Override
        public void show() {
    
    
            System.out.println("春天,春风又绿江南岸");
        }
    },
    SUMMER("夏天","映日荷花别样红"){
    
    
        @Override
        public void show() {
    
    
            System.out.println("夏天,映日荷花别样红");
        }
    },
    AUTUMN("秋天","秋水共长天一色"){
    
    
        @Override
        public void show() {
    
    
            System.out.println("秋天,秋水共长天一色");
        }
    },
    WINTER("冬天","窗含西岭千秋雪"){
    
    
        @Override
        public void show() {
    
    
            System.out.println("冬天,窗含西岭千秋雪");
        }
    };
    private final String seasonName;
    private final String seasonDesc;
    private Season(String seasonName, String seasonDesc){
    
    
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

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

运行结果
在这里插入图片描述

写在最后

写完这篇博客就要开始集合的学习了,很重要的一章,同样,学完之后我也会更新集合内容的博客,冲冲冲!我是超梦。若有错误请指正,期待与你一起变好!

猜你喜欢

转载自blog.csdn.net/weixin_45834777/article/details/107332484
今日推荐