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

详解:枚举类

        枚举类(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;}@Overridepublic 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;}@Overridepublic 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类),但可以实现接口(结合第一条:枚举类不能继承其他类也不能被其他类继承,只能实现接口)
4.如果枚举类没有显式定义构造器,那么它默认存在一个无参构造器。这是因为在Java中,每个枚举类都隐式地继承自java.lang.Enum类,而java.lang.Enum类提供了一个无参的构造器。因此,即使你不在枚举类的定义中显式编写构造器,编译器也会自动为你提供一个无参构造器。

http://www.mrgr.cn/news/65873.html

相关文章:

  • Debian的基本使用
  • 针对解决前后端BUG的个人笔记
  • 使用 API 和离线库查询 IP 地址方法详解
  • 【jvm】为什么Xms和Xmx的值通常设置为相同的?
  • pgSQL中对json数组中的一个元素中的字段进行条件查询
  • 二百七十四、Kettle——ClickHouse中对错误数据表中进行数据修复(实时)
  • 关于Linux系统调试和性能优化技巧有哪些?
  • 计算机启动过程中各个步骤
  • 全面解析:物联网技术及其应用
  • ACTF新生赛2020:NTFS数据流
  • C++——用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个团数,整数和n在主函数中输人,最后在主函数中输出。
  • 十四届蓝桥杯STEMA考试Python真题试卷第二套第四题
  • 一文了解Android SELinux
  • Golang | Leetcode Golang题解之第538题把二叉搜索树转换为累加树
  • Python | Leetcode Python题解之第538题把二叉搜索树转换为累加树
  • DDD学习笔记
  • 麻省理工学院的研究人员最近开发了一种新的机器人训练方法
  • 阿里云服务器 篇十:自动定时备份CSDN博客内容
  • 十四届蓝桥杯STEMA考试Python真题试卷第二套第五题
  • 【Java知识】java进阶-一个好用的java应用分析工具arthas
  • markdown/Latex希腊字母αβγ...λ...π等怎么编辑
  • sqlserver
  • 【C++ 曼哈顿距离 数学】1131. 绝对值表达式的最大值|2059
  • 模块功能的描述方法
  • 理解数据加载器(Data Loader)
  • OSI参考模型