java 枚举(enum)
发布日期:2021-05-07 10:30:32 浏览次数:21 分类:精选文章

本文共 4831 字,大约阅读时间需要 16 分钟。

介绍

  • 枚举是一组常量的集合
  • 枚举属于一种特殊的类,里面只包含一组有限的特定的对象

枚举的实现方式

  • 自定义类实现枚举
/** * @author 刘龙 * @version 1.0 */public class Enumeration01 {       public static void main(String[] args) {           // 对于季节,对象的值是具体的,是固定的四个,不会有更多        System.out.println(Season.SPRING);    }}/** * 自定义枚举类 */class Season {       private String name;    private String desc;    /**     * 定义了4个对象     */    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("秋天", "凉爽");    /**     * 1.将构造器私有化     * 2.去掉setXxx方法,防止属性被修改     * 3.在Season内部,直接创建固定的对象     * 4.优化,加入final修饰符     * @param name     * @param desc     */    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 + '\'' +                '}';    }}

使用enum关键字实现枚举

  • 当我们使用enum关键字开发一个枚举类时,默认会继承Enum类
  • 传统的public static final Season2 SPRING = new Season2(“春天”,“温暖”),
    简化成SPRING(“春天”,“温暖”)
  • 如果使用无参构造器 创建 枚举对象, 则实参列表和小括号可以省略
  • 当有多个枚举对象时,使用,间隔,最后有一个分号结尾
  • 枚举对象必须放在枚举类的行首
/** * @author 刘龙 * @version 1.0 */public class Enumeration02 {       public static void main(String[] args) {           Season2 autumn = Season2.AUTUMN;        // 返回当前对象的名称 AUTUMN        System.out.println(autumn.name());        // 没有重写toString()返回 对象的名称        // AUTUMN        System.out.println(autumn);        // 返回当前对象的位置号,默认从0开始 3        System.out.println(autumn.ordinal());        // 返回定义的所有对象,根据对象输出名称        // SPRING		// WINTER		// SUMMER		// AUTUMN        Season2[] values = Season2.values();        for (Season2 value : values) {               System.out.println(value.name());        }        // 根据字符串寻找指定的枚举对象,要求字符串必须为已有的常量名        Season2 summer = Season2.valueOf("SUMMER");        System.out.println(summer);    }}/** * 使用enum关键字来实现枚举 */enum Season2 {       /**     * 定义了4个对象     * 如果使用了enum关键字来实现枚举     * 1.使用关键字enum 替代 class     * 2.常量名(实参列表)     * 3.如果有多个常量(对象). 使用.间隔开     * 4.如果使用enum实现枚举,要求将定义常量对象,写在前面     */    SPRING("春天", "温暖"),WINTER("冬天", "寒冷"),SUMMER("夏天", "炎热"),AUTUMN("秋天", "凉爽");    private String name;    private String desc;    /**     * 1.将构造器私有化     * 2.去掉setXxx方法,防止属性被修改     * 3.在Season内部,直接创建固定的对象     * 4.优化,加入final修饰符     * @param name     * @param desc     */    private Season2(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 + '\'' +                '}';    }}

练习

public class EnumExercise02 {       public static void main(String[] args) {           Week[] values = Week.values();        for (Week value : values) {               System.out.println(value.getName());        }    }}enum Week{       MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),THURSDAY("星期四"),FRIDAY("星期五"),    SATURDAY("星期六"),SUNDAY("星期天");    private String name;    private Week(String name) {           this.name = name;    }    public String getName() {           return name;    }}//输出星期一星期二星期三星期四星期五星期六星期天

练习2

interface ColorManager {       void show();}enum Color implements ColorManager {       RED(255, 0, 0),    BLUE(0, 0, 255),    BLACK(255, 255, 255),    YELLOW;    private int redValue;    private int greenValue;    private int blueValue;    Color(int redValue, int greenValue, int blueValue) {           this.redValue = redValue;        this.greenValue = greenValue;        this.blueValue = blueValue;    }    Color() {       }    @Override    public void show() {           System.out.println(toString());    }    @Override    public String toString() {           return "Color{" +                "redValue=" + redValue +                ", greenValue=" + greenValue +                ", blueValue=" + blueValue +                '}';    }}public class Homework08 {       public static void main(String[] args) {           Color red = Color.RED;        switch (red) {               case RED:                System.out.println("红色");                red.show();                break;            case BLUE:                break;            case BLACK:                break;            case YELLOW:                break;            default:                System.out.println("没有匹配到");        }    }}//输出红色Color{   redValue=255, greenValue=0, blueValue=0}

小结

  • 使用enum关键字后,就不能再继承其它类了,因为enum类会隐式继承Enum
  • 枚举类和普通类一样,可以实现接口
    enum 类名 implements 接口1, 接口2
上一篇:java 注解(Annotation)
下一篇:java 接口(Interface)的多态特性

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年05月13日 00时51分27秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

python&anconda 系列:Pycharm在debug问题的N种解决方案(一般程序、web方向、人工智能方向) 2025-03-28
python&anconda系列(亲测有效):tensorflow AttributeError: ‘str’ object has no attribute ‘decode’ 2025-03-28
python&anconda系列:tf.keras.backend.get_session()和keras.backend.get_会话()返回不同的会话对象(待解答) 2025-03-28
"WARNING: Increasing RAM size to 1GB" and "Cannot set up guest memory 'xxx.ram': Invalid argument". 2025-03-28
#if 0 #elif 1 #else #endif 用法 2025-03-28
(反射+内省机制的运用)简单模拟spring IoC容器的操作 2025-03-28
(转)tomcat7.0 manager app和host manager web管理 2025-03-28
.Net(C#)实现异步编程 2025-03-28
.Net中webBrowser控件JS交互 2025-03-28
02-Docker镜像分类及操作秘籍,轻松掌握导出、导入、删除 2025-03-28
04-docker-commit构建自定义镜像 2025-03-28
04-docker系列-commit构建自定义镜像 2025-03-28
05-docker系列-使用dockerfile构建镜像 2025-03-28
05-如何通过Dockerfile实现高效的应用容器化? 2025-03-28
09-docker系列-docker网络你了解多少(下) 2025-03-28
10-docker系列-docker文件共享和特权模式 2025-03-28
#C2#S2.2~S2.3# 加入 factory/objection/virtual interface 机制 2025-03-28
#C8# UVM中的factory机制 #S8.1.1# OOP 语言三大特性 systemverilog的支持 2025-03-28
#C8# UVM中的factory机制 #S8.1.4# 约束的重载 2025-03-28
#C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形 2025-03-29