• Java枚举


    目录

    枚举概念

    枚举的引入:

    1.传统方式

    改进

    2.新技术,使用枚举

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

    常用方法:


    枚举概念

    枚举是一组常量的集合

    可以理解为:枚举属于一种特殊的类,里面只包含一组有限的特定的对象

    枚举的引入:

    要求创建季节Season对象,请设计并完成

    1.传统方式

    1. package com.cs.enum_;
    2. public class Enumeration01 {
    3. public static void main(String[] args) {
    4. //使用
    5. Season season = new Season("春天", "温暖");
    6. Season winter = new Season("冬天", "寒冷");
    7. Season summer = new Season("夏天", "炎热");
    8. Season autumn = new Season("秋天", "凉爽");
    9. Season other = new Season("红天","~~~");
    10. }
    11. }
    12. class Season {//类
    13. private String name;
    14. private String desc;//描述
    15. public Season(String name, String desc) {
    16. this.name = name;
    17. this.desc = desc;
    18. }
    19. public String getName() {
    20. return name;
    21. }
    22. public void setName(String name) {
    23. this.name = name;
    24. }
    25. public String getDesc() {
    26. return desc;
    27. }
    28. public void setDesc(String desc) {
    29. this.desc = desc;
    30. }
    31. }

    Season对象特点:

    (1)季节的值是有限的几个

    (2)只读,不需要修改

    改进

    1. public class Enumeration02 {
    2. public static void main(String[] args) {
    3. System.out.println(Season.SPRING);
    4. System.out.println(Season.SUNNER);
    5. System.out.println(Season.AUTUMN);
    6. System.out.println(Season.WINTER);
    7. }
    8. }
    9. //演示定义枚举实现
    10. class Season {//类
    11. private String name;
    12. private String desc;//描述
    13. //定义了四个对象,固定
    14. public static final Season SPRING = new Season("春天", "温暖");
    15. public static final Season WINTER = new Season("冬天", "寒冷");
    16. public static final Season AUTUMN = new Season("秋天", "凉爽");
    17. public static final Season SUNNER = new Season("夏天", "炎热");
    18. private Season(String name, String desc) {
    19. this.name = name;
    20. this.desc = desc;
    21. }
    22. public String getName() {
    23. return name;
    24. }
    25. public String getDesc() {
    26. return desc;
    27. }
    28. @Override
    29. public String toString() {
    30. return "Season{" +
    31. "name='" + name + '\'' +
    32. ", desc='" + desc + '\'' +
    33. '}';
    34. }
    35. }

    2.新技术,使用枚举

    构造器私有化

    去掉Set相关方法

    1. public class Enumeration03 {
    2. public static void main(String[] args) {
    3. System.out.println(Season.SPRING);
    4. System.out.println(Season.SUMMER);
    5. System.out.println(Season.AUTUMN);
    6. System.out.println(Season.WINTER);
    7. //Enum
    8. }
    9. }
    10. //演示定义枚举实现
    11. enum Season {//类
    12. SPRING("春天", "温暖"),
    13. WINTER("冬天", "寒冷"),
    14. AUTUMN("秋天", "凉爽"),
    15. SUMMER("夏天", "炎热"), WHAT();
    16. private String name;
    17. private String desc;//描述
    18. private Season() {
    19. }
    20. private Season(String name, String desc) {
    21. this.name = name;
    22. this.desc = desc;
    23. }
    24. public String getName() {
    25. return name;
    26. }
    27. public String getDesc() {
    28. return desc;
    29. }
    30. @Override
    31. public String toString() {
    32. return "Season{" +
    33. "name='" + name + '\'' +
    34. ", desc='" + desc + '\'' +
    35. '}';
    36. }
    37. }

    1.不需要提供setXxx方法,因为枚举对象通常为只读

    2.对枚举对象/属性使用final + static 共同修饰,实现底层优化

    3.枚举对象名通常使用全部大写,常量的命名规范

    4.枚举对象根据需要,也可以有多个属性

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

    1.当我们使用enum关键字开发一个枚举类时,默认会继承Enum类

    2.传统改进后的public static final Season2 SPRING = new Season2("春天", "温暖");简化成SPRING("春天","温暖"),这里必须知道,它调用的是哪个构造器

    3.如果使用无参构造器 创建枚举对象,则小括号可以省略

    4.当有多个枚举对象时,使用,间隔最后有一个分号结尾

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

     

     因为使用enum时,会隐式继承Enum类,这样我们就可以使用Enum类的相关方法

    常用方法:

    1.toString:Enum类已经重写过了,返回的是当前对象名,子类可以重写该方法。

     

    /**

    *枚举声明中声明的此枚举常量的名称。

    *大多数程序员应该使用{@link#toString}方法,而不是

    *访问此字段。

    */

    感觉看悟性吧,我认为很好理解,想一下重写toString的本质是干啥就容易理解了。

    2.name:返回当前对象名(常量名),子类种不能重写

     

     

    3.ordinal:返回当前对象的位置号,默认从0开始

     

     

    4.values:返回当前枚举类中所有的常量

     

     

    5.valueOf:将字符串转换成枚举对象,要求字符串必须为已有的偿命名,否则报异常!

     

    这个是因为我重写了toString方法

     

     

    6.compareTo:比较两个枚举常量,比较的就是位置号

     Enum类实现了Comparable接口

     

     

    看一下Enum重写的CompareTo方法

    /**

    *将此枚举与指定的order对象进行比较。返回a

    *负整数、零或正整数,因为此对象较小

    *大于、等于或大于指定对象。

    *

    *枚举常量只能与的其他枚举常量进行比较

    *相同的枚举类型。自然秩序

    *方法是常量的声明顺序。

    */

  • 相关阅读:
    【大数据入门核心技术-Zookeeper】(一)Zookeeper基本原理
    JUC并发编程系列详解篇四(线程基础理论)
    DES加解密
    Cisco ACL 中的通配符掩码详解
    MySQL 慢查询
    【CMake】第1篇 了解 CMake 构建源码输出 Hello world(初学者必备)
    查看apk签名
    布隆过滤器&HyperLogLog
    【无标题】
    Android12---下拉状态栏添加网速显示(MTK平台)
  • 原文地址:https://blog.csdn.net/qq_63918780/article/details/125402271