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

【Java学习笔记】枚举

枚举(enum)

一、基本介绍

  • 引出关键字:enum,全称为enumerate

  • 枚举是一组常量集合

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

二、使用场景

当一个类的属性有限定条件时(例如一个星期只能有七天),可以使用枚举类(特点:只读不改

三、实现枚举的方式

1. 自定义类实现枚举

特点如下(构建方法四步走)

补充内容

2. 使用enum关键字实现枚举

四、追寻 enum 类的底层源码(使用javap反编译)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

五、enum 类的成员方法

方法名详细描述
valueOf传递枚举类型的 Class 对象和枚举常量名称给静态方法 valueOf,会得到与参数匹配的枚举常量。
toString得到当前枚举常量的名称。你可以通过重写这个方法来使得到的结果更易读。
equals在枚举类型中可以直接使用 == 来比较两个枚举常量是否相等。Enum 提供的这个 equals() 方法,也是直接使用 == 实现的。它的存在是为了在 Set、List 和 Map 中使用。注意,equals() 是不可变的。
hashCodeEnum 实现了 hashCode() 来和 equals() 保持一致。它也是不可变的。
getDeclaringClass得到枚举常量所属枚举类型的 Class 对象。可以用它来判断两个枚举常量是否属于同一个枚举类型。
name得到当前枚举常量的名称。建议优先使用 toString()。
ordinal得到当前枚举常量的次序。
compareTo枚举类型实现了 Comparable 接口,这样可以比较两个枚举常量的大小(按照声明的顺序排列)
clone枚举类型不能被 Clone。为了防止子类实现克隆方法,Enum 实现了一个仅抛出 CloneNotSupportedException 异常的不可变 Clone()。

常用方法的说明

请添加图片描述

六、enum实现接口

通过类名调用在类中创建的对象实例,即eunm 类名 . 创建对象的对象名(这就表示 enum 的一个实例对象),通过对象调用方法


案例:设置季节类

分析:季节只有四季

一、自定义类实现枚举

代码示例

package enum_;public class main {public static void main(String[] args) {// 直接访问类中创建的对象,用过 toString 方法重写后会输出对象的信息System.out.println(season.SPRRING);System.out.println(season.SUMMER);System.out.println(season.AUTUMN);System.out.println(season.WINTER);}
}class season{// 对象属性私有化private String name;private String info;// 创建实例对象提供给其他类进行读取public final static season SPRRING = new season("春天","温暖");public final static season SUMMER = new season("夏天","炎热");public final static season AUTUMN = new season("秋天","凉爽");public final static season WINTER = new season("冬天","寒冷");// 构造器私有化private season(String name, String info) {this.name = name;this.info = info;}public String getName() {return name;}public String getInfo() {return info;}// 重写 toString 方法,输出对象的信息@Overridepublic String toString() {return "season{" +"name='" + name + '\'' +", info='" + info + '\'' +'}';}
}// 输出结果
season{name='春天', info='温暖'}
season{name='夏天', info='炎热'}
season{name='秋天', info='凉爽'}
season{name='冬天', info='寒冷'}

二、使用enum关键字实现枚举

代码示例

package enum_;public class main {public static void main(String[] args) {// 直接访问类中创建的对象,用过 toString 方法重写后会输出对象的信息System.out.println(season.SPRING);System.out.println(season.SUMMER);System.out.println(season.AUTUMN);System.out.println(season.WINTER);System.out.println(season.season);}}enum season{// 枚举对象必须位于枚举类的开头SPRING("春天","温暖"),SUMMER("夏天","炎热"),AUTUMN("秋天","凉爽"), WINTER("冬天","寒冷"),season;/*使用枚举对象代替了public final static season SPRRING = new season("春天","温暖");public final static season SUMMER = new season("夏天","炎热");public final static season AUTUMN = new season("秋天","凉爽");public final static season WINTER = new season("冬天","寒冷");*/// 对象属性私有化private String name;private String info;// 构造器私有化private season(){}private season(String name, String info) {this.name = name;this.info = info;}public String getName() {return name;}public String getInfo() {return info;}// enum类在底层继承了父类,在子类中不重写该方法// 调用父类的方法,输出的是对象的名称
}

注意:子类不重写 toString 方法,enum类在底层继承了父类,调用父类的方法,输出的是对象的名称

三、enum成员方法

请添加图片描述

代码示例

package enum_;public class main {public static void main(String[] args) {season spring = season.SPRING;// name 方法System.out.println("1. 调用 name() 方法:" + spring.name());System.out.println("spring.name() = " + spring.name());System.out.println();// ordinal 方法:从 0 开始编号System.out.println("2. 调用 ordinal() 方法");System.out.println("spring.ordinal() = "+ spring.ordinal());System.out.println();// values 方法 :返回的是数组,存储 enum类 中的所有常量System.out.println("3. 调用 values() 方法,遍历数组,返回所有常量");season[] seasons = season.values();/*使用增强for循环for(变量类型 变量名:数组或集合)*/for(season s:seasons){System.out.println(s);}System.out.println();// valueOf 方法:判断常量是否存在于enum类中,存在则返回常量名,否则报异常System.out.println("4. 调用 valueof() 方法");System.out.println("season.valueOf(\"AUTUMN\") = " + season.valueOf("AUTUMN"));
//        System.out.println("season.valueOf(\"hi\") = " + season.valueOf("hi")); // 会报异常System.out.println();// compareTo() 方法:计算两个枚举常量位置序号的差值System.out.println("5. 调用 compareTo() 方法");System.out.println("season.WINTER.compareTo(season.SPRING) = " + season.WINTER.compareTo(season.SPRING));System.out.println();}}enum season{// 枚举对象必须位于枚举类的开头SPRING("春天","温暖"),SUMMER("夏天","炎热"),AUTUMN("秋天","凉爽"), WINTER("冬天","寒冷");// 对象属性私有化private String name;private String info;// 构造器私有化private season(){}private season(String name, String info) {this.name = name;this.info = info;}public String getName() {return name;}public String getInfo() {return info;}// enum类在底层继承了父类,在子类中不重写该方法// 调用父类的方法,输出的是对象的名称/*enum类的 toString 方法public String toString() {return name;}*/
}// 输出结果
1. 调用 name() 方法:SPRING
spring.name() = SPRING2. 调用 ordinal() 方法
spring.ordinal() = 03. 调用 values() 方法,遍历数组,返回所有常量
SPRING
SUMMER
AUTUMN
WINTER4. 调用 valueof() 方法
season.valueOf("AUTUMN") = AUTUMN5. 调用 compareTo() 方法
season.WINTER.compareTo(season.SPRING) = 3

四、enum 实现接口

代码示例

package enum_;public class main {public static void main(String[] args) {// season.INTERFACE_METHIOD 是 enum 类的一个实例对象,通过对象调用方法season.INTERFACE_METHIOD.hi();}}interface A{public void hi();
}enum season implements A{// 枚举对象必须位于枚举类的开头SPRING("春天","温暖"),SUMMER("夏天","炎热"),AUTUMN("秋天","凉爽"), WINTER("冬天","寒冷"),INTERFACE_METHIOD;// 对象属性私有化private String name;private String info;// 构造器私有化private season(){}private season(String name, String info) {this.name = name;this.info = info;}public String getName() {return name;}public String getInfo() {return info;}public void hi(){System.out.println("在 enum 类中实现了接口的 hi() 方法");}
}

相关文章:

  • 初学大模型部署以及案例应用(windows+wsl+dify+mysql+Ollama+Xinference)
  • python打卡day42
  • Mask_RCNN 环境配置及训练
  • leetcode hot100 二叉树(一)
  • 第七部分:第四节 - 在 NestJS 应用中集成 MySQL (使用 TypeORM):结构化厨房的原材料管理系统
  • 剑指offer hot100 第三周
  • 查看make命令执行后涉及的预编译宏定义的值
  • java synchronized关键字用法
  • io流2——字节输入流,文件拷贝
  • Codeforces 1027 Div3(ABCDEF)
  • Java网络编程基础:从阻塞式I/O到线程池模型
  • DAY 34 超大力王爱学Python
  • C++ —— STL容器——string类
  • ps中通过拷贝的图层和通过剪切的图层
  • java多线程与JUC
  • ck-editor5的研究 (4):初步使用 CKEditor5 的插件功能
  • Cesium快速入门到精通系列教程三
  • 高速串行接口
  • Spring Boot 4.0实战:构建高并发电商系统
  • ArkTS基础
  • 哪些网站做外贸效果好/宁波seo公司排名榜
  • wordpress 导航 插件/江北seo页面优化公司
  • 买卖网站建设/百度推广退款电话
  • 行业b2b网站/长沙营销型网站建设
  • 山东青岛网站建设公司哪家专业/整站快速排名优化
  • 服装网站建设策划/企业网络营销顾问