当前位置: 首页 > article >正文

详解:枚举类

        枚举类(Enum)是一种特殊的类,用于定义一组固定的常量。在Java中,枚举类使用enum关键字来定义。

特点:

  1. 枚举类的每个实例都是唯一的,且在编译时确定。

  2. 枚举类的实例可以直接通过类名访问,不需要创建实例。(因为实例对象是 public final static 修饰的)

  3. 枚举类可以有自己的方法和构造器。

  4. 枚举类默认继承自java.lang.Enum类,因此具有一些内置的方法,如toString()ordinal()compareTo()等。(注意:因为枚举类隐式地继承了java.lang.Enum类所以他不能继承其他类(单继承),但可以实现接口)

一、自定义枚举类:

步骤:

(1)构造器私有化

解释:不能从外部类直接创建枚举实例对象

(2)在本类内部创建对象并且对外暴露对象(创建对象用 public final static 修饰)
(4)可以提供 get 方法,但是不能提供 set 方法

解释:防止外部类直接对枚举类的属性进行修改

代码演示:(输出一年的季节)

public class Season {
    private String name;
    public final static Season season1 = new Season("春天");
    public final static Season season2 = new Season("夏天");
    public final static Season season3 = new Season("秋天");
    public final static Season season4 = new Season("冬天");
    private Season(String name){
        this.name=name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                '}';
    }
}
class Test{
    public static void main(String[] args) {
        System.out.println(Season.season1);
        System.out.println(Season.season2);
        System.out.println(Season.season3);
        System.out.println(Season.season4);
    }
}

结果如下:

Season{name='春天'}
Season{name='夏天'}
Season{name='秋天'}
Season{name='冬天'}

 二、使用enum关键字来定义

修改步骤:

(1)使用关键字 enum 替代 class
(2)public static final Season season1 = new Season("春天")直接用 SPRING("春天")代替 ,SPRING是常量名,括号是实参列表(即调用的构造器)
(3)如果有多个常量(对象),使用“,”号间隔即可
(4)如果使用enum来实现枚举,要求将定义常量对象写在最前面

修改后的代码:

public enum Season {
    SPRING("春天"),SUMMER("夏天"), AUTUMN("秋天"),WINTER("冬天");
    private String name;

     Season(String name){
        this.name=name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                '}';
    }
}
class Test{
    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);
    }
}

结果和上面一样

解释

  1. 枚举常量的定义
    • 在枚举类中,枚举常量(如SPRING,SUMMER等)被自动声明为public static final的实例。
    • 每个枚举常量都是枚举类的一个唯一实例。(因为有final修饰)
  2. 枚举类的属性和方法
    • 枚举类可以包含属性、方法和构造函数。
    • 属性可以是实例变量,用于存储每个枚举常量的特定信息(如上面的name属性)。
    • 方法可以是实例方法,用于提供枚举常量的行为(如上面的toString方法)。
  3. 枚举类的构造函数
    • 枚举类的构造函数默认是私有的,这意味着你不能从外部类直接创建枚举实例。
    • 枚举常量是在枚举类被加载时自动实例化的,因此每个枚举常量都是单例的。
  4. 遍历枚举常量
    • 可以使用values()方法遍历枚举类的所有常量。
  5. 使用枚举类
    • 在代码中,可以通过枚举类名直接访问枚举常量。
    • 可以调用枚举常量的方法和属性。

注意事项:

1.在Java中,枚举类(enum)默认是final的,这意味着它们不能被继承。这是Java语言设计的一个特性,目的是确保枚举类的完整性和一致性。(枚举类的构造器是私有化的所以子类也无法调用父类的构造器)
2.如果使用无参构造器创建枚举对象,则小括号可以省略
3.枚举类不能继承其他类(因为枚举类隐式地继承了java.lang.Enum类),但可以实现接口(结合第一条:枚举类不能继承其他类也不能被其他类继承,只能实现接口)

http://www.kler.cn/a/379698.html

相关文章:

  • Oracle OCP认证考试考点详解082系列11
  • 大数据之Hadoop集群
  • 推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
  • 接口测试(十一)jmeter——断言
  • vue3中使用vue-diff工具来比较数据差异
  • 【Python+Pycharm】2024-Python安装配置教程
  • 【力扣专题栏】K个一组对链表进行翻转,如何实现分组翻转链表?
  • 东方通TongWeb替换Tomcat的踩坑记录
  • VLAN间通信以及ospf配置
  • 2024年第六届全球校园人工智能算法精英大赛——【算法挑战赛】钢材表面缺陷检测与分割 比赛复盘
  • aws(学习笔记第十课) 对AWS的EBS如何备份(snapshot)以及使用snapshot恢复数据,AWS实例存储
  • 深度学习-如何计算神经网络的输出?
  • 重学SpringBoot3-整合 Elasticsearch 8.x (二)使用Repository
  • 为什么说模拟电路的难点就在开通过程和关断过程?难在什么地方?
  • 【数学二】线性代数-矩阵-初等变换、初等矩阵
  • 数据结构模拟题[十一]
  • 【使用 Python 和 ADB 检查 Android 设备的 Wi-Fi 状态】
  • python实现钉钉群机器人消息通知(消息卡片)
  • kafka消费端常见故障及处理方法
  • MySQL 高性能优化规范建议
  • 浅谈RPC的实现原理与RPC实战
  • HTTP、WebSocket、gRPC 或 WebRTC:各种协议的区别
  • 【LwIP源码学习5】网口接收数据处理过程
  • 【Python+Pycharm】2024-Python安装配置教程
  • STM32:IIC详解
  • opencv学习笔记(6):图像预处理(直方图、图像去噪)