枚举(Enum)在Java中的理解与使用

枚举的本质
  • 枚举是一组业务相关的常量集。
  • 在Java中,枚举是继承自java.lang.Enum的final类。
  • 枚举值是静态的、不可修改的、公有的常量。
枚举的定义与特性
  • 枚举值命名使用大写字母加下划线的方式。
  • 枚举类可以包含成员变量、构造函数、方法。
  • 枚举值之间使用==进行比较,比较的是内存地址。
  • 枚举类可以序列化,但需要特别注意其序列化机制。
枚举的字节码分析
  • 枚举类在编译后会生成额外的valuesvalueOf方法。
  • values方法返回枚举类型的所有值的数组。
  • valueOf方法根据名称返回对应的枚举值。
枚举的使用模式
  • 基础使用:定义枚举类型并使用其常量。
  • 作为内部类:在类内部定义枚举,增强封装性。
  • 覆盖toString()方法:根据需要返回更友好的字符串表示。
  • 使用构造函数:为枚举添加自定义字段和构造函数。
  • 定义抽象方法:枚举可以实现抽象方法,每个枚举常量提供具体实现。
  • 实现接口:枚举可以像普通类一样实现接口。
枚举的高级使用
  • 单元素枚举实现单例模式:每个枚举元素都是单例。
  • 添加自定义方法:枚举可以添加工具方法。
  • 使用静态代码块:初始化静态变量或执行其他静态初始化逻辑。
  • 无实例枚举:作为工具类使用,类似于public final class
枚举与泛型
  • 枚举可以用作泛型的限定类型,确保类型安全。
枚举的多态性
  • 枚举可以实现接口,展示多态性。
枚举与配置
  • 枚举的字段可以引用配置文件中的值,通过自定义字段的读取方法实现。
枚举的比较与排序
  • compareTo方法用于比较枚举值,基于它们在枚举中声明的顺序。
测试用例
  • 测试枚举的name()ordinal()方法和compareTo方法。
示例代码
  • 枚举定义示例,包括自定义方法和实现接口的示例。
  • 枚举与单例模式的结合使用。
  • 枚举作为工具类使用。
注意点
  • 枚举常量不可变,但可以在枚举类中增加自定义的可变字段,尽管不推荐这样做。
  • 枚举的构造函数是私有的,通过枚举常量隐式调用。
结语
  • 枚举不仅仅是简单的常量集合,它们是功能丰富的类,可以实现多种设计模式和编程技巧。

思考

我写了这么多,你看了这么久,下面result应该是几呢?(先不看答案)

@Test
void testOrdinal() {
    Season spring = Season.SPRING;
    Season summer = Season.SUMMER;
    int result = spring.compareTo(summer);
    System.out.println(result); // result == ?
}
  • compareTo方法比较的是枚举常量的声明顺序,spring.compareTo(summer)的结果取决于SPRINGSUMMER在枚举中的定义顺序。如果SPRINGSUMMER之前定义,则结果为负;反之则为正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值