Java枚举详解

简介: Java枚举详解

基本介绍

  • 枚举对应英文(enumeration,简写 enum)
  • 枚举是一组常量的集合
  • 枚举属于一种特殊的类,里面只包含一组有限的特定的对象
  • 不需要提供 setXxxx() 方法,因为枚举对象值通常为只读
  • 对枚举对象/属性使用 static+final 共同修饰
static+final 只有修饰基本数据类型、String类型才不会加载类,修饰对象或者方法还是会加载类
final 修饰对象(引用)只是保证引用的指向不变,但不能保证对象本身不变
  • 枚举对象名通常使用全部大写,与常量的命名规范一样
  • 枚举对象根据需要,也可以有多个属性

1.自定义类实现枚举

  • 将构造器私有化,目的是防止被new出对象
  • 去掉 setXxxx() 方法,防止属性被修改
  • 在Season内部,直接创建固定对象
  • 对外暴露对象(通过为对象添加 public static final 修饰符)
public class Demo03 {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
        System.out.println(Season.SUMMER);
    }
}
class Season{
    private String name;
    private String desc;
    //定义了四个对象
    //加final是为了使引用不能被修改
    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("秋天", "凉爽");
    
    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 + '\'' +
                '}';
    }
}

image.png
2.使用enum关键字实现枚举
使用 enum 关键字代替 class
常量对象名(实参列表)
public static final Season2 SPRING = new Season2("春天", "温暖"); 等价于 SPRING("春天", "温暖");
如果有多个对象,需要使用 ,间隔
如果使用 enum 关键字来实现枚举,要求将定义的常量对象写在最前面

public class Demo04 {
    public static void main(String[] args) {
        System.out.println(Season2.SPRING);
        System.out.println(Season2.SUMMER);
    }
}
enum  Season2{
    SPRING("春天", "温暖"),WINTER("夏天", "炎热"),SUMMER("夏天", "炎热"),AUTUMN("秋天", "凉爽");
​
    private String name;
    private String 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 + '\'' +
                '}';
    }
}

image.png
使用enum关键字实现枚举的注意事项
当我们使用enum关键字开发一个枚举类时,默认会继承Enum类;而且该枚举类是一个final类
如果使用无参构造器创建枚举对象,则可以省略小括号
当有多个枚举对象时,使用 ,隔开,最后以一个分号结尾
枚举对象必须放在枚举类的行首
enum的常用方法
使用关键字enum时,会隐式继承Enum类,这样就可以使用Enum类的相关方法
toString():Enum类已经重写过了,返回的是当前对象名;子类可以重写该方法,用于返回对象的属性信息
name():返回当前对象名(常量名),子类中不能重写
ordinal():返回当前对象的位置号,默认从0开始
values():返回当前枚举类中所有的常量对象
valueOf():将字符串转换成已有的枚举对象,要求字符串必须为已有的常量名,否则报异常!
compareTo():比较两个枚举常量的大小(编号),返回的结果是两个枚举常量的编号相减得到的数
enum的使用细节
使用enum关键字创建的枚举类,就不能再继承其它类了,因为使用enum创建的枚举类会隐式的继承Enum类,而Java是单继承机制
枚举类和普通类一样,可以实现接口

目录
相关文章
|
7天前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
96 60
|
2月前
|
安全 Java 索引
Java——反射&枚举
本文介绍了Java反射机制及其应用,包括获取Class对象、构造方法、成员变量和成员方法。反射允许在运行时动态操作类和对象,例如创建对象、调用方法和访问字段。文章详细解释了不同方法的使用方式及其注意事项,并展示了如何通过反射获取类的各种信息。此外,还介绍了枚举类型的特点和使用方法,包括枚举的构造方法及其在反射中的特殊处理。
58 9
Java——反射&枚举
|
2月前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
77 5
|
2月前
|
安全 Java 开发者
Java 枚举(enum)详解
Java 中的枚举(`enum`)是一种特殊的数据类型,用于定义一组固定的常量,提升代码的类型安全性和可读性。枚举使用 `enum` 关键字定义,支持方法和构造函数,具有类型安全、单例、自动序列化等特点,并且可以遍历和用于 `switch` 语句中。实际应用包括状态机、指令集、类型标识等场景。枚举使代码更加清晰易维护。
|
6月前
|
安全 Java 程序员
Java语言枚举(Enum)的深入探索
Java语言枚举(Enum)的深入探索
|
3月前
|
Java
Java枚举使用的基本案例
这篇文章是关于Java枚举的基本使用,通过一个指令下发的代码案例,展示了如何定义枚举、使用枚举以及如何通过枚举实现指令的匹配和处理。
|
3月前
|
Java 开发者
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案。本文通过技术综述及示例代码,剖析两者在性能上的差异。if-else具有短路特性,但条件增多时JVM会优化提升性能;switch则利用跳转表机制,在处理大量固定选项时表现出色。通过实验对比可见,switch在重复case值处理上通常更快。尽管如此,选择时还需兼顾代码的可读性和维护性。理解这些细节有助于开发者编写出既高效又优雅的Java代码。
47 2
|
3月前
|
安全 Java 编译器
|
4月前
|
存储 缓存 Java
java枚举消除冗余代码问题之findByName和findByValue方法工作时的问题如何解决
java枚举消除冗余代码问题之findByName和findByValue方法工作时的问题如何解决
|
4月前
|
安全 Java
Java进阶之枚举
【7月更文挑战第11天】Java枚举是Java 5引入的特性,用于定义固定常量集合,如星期。枚举是继承自`java.lang.Enum`的特殊类,编译后成为final类,每个枚举值是静态final实例。定义枚举用`enum`关键字,如`public enum Weekday {MONDAY, TUESDAY, ...}`。枚举可包含方法和变量,能实现接口但不能继承其他类。例如,`Weekday`枚举可实现`Describe`接口,提供`describe()`方法。在实际应用中,枚举常用于表示如响应状态等固定选项,便于类型安全和代码阅读。
37 8