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

【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() 方法");}
}
http://www.xdnf.cn/news/10403.html

相关文章:

  • 怎么更改cursor chat中的字体大小
  • XCPC 常用技巧
  • Beta分布Dirichlet分布
  • [Python] Python中的多重继承
  • 飞牛fnNAS装机之迷你小主机的利旧
  • SolidWorks软件的安装与卸载
  • 12 Java GUI
  • Word双栏英文论文排版攻略
  • 【解决】【亲测下载obsidian可行】打不开github.com 或者 加速访问 github
  • Pull Request Integration 拉取请求集成
  • Python实现HPSO-TVAC优化算法优化支持向量机SVC分类模型项目实战
  • QT/c++航空返修数据智能分析系统
  • 重读《人件》Peopleware -(15)Ⅱ 办公环境 Ⅷ 撑伞之步:构建理想办公环境(上)
  • 数据中台(大数据平台)之数据安全管理
  • InternVL2.5-多模态大模型评估专业图片
  • Python爬虫:AutoScraper 库详细使用大全(一个智能、自动、轻量级的网络爬虫)
  • 从模式到架构:Java 工厂模式的设计哲学与工程化实践
  • 【办公类-22-05】20250601Python模拟点击鼠标上传CSDN12篇
  • 开始使用 Elastic AI Assistant for Observability 和 Amazon Bedrock
  • 接口自动化常用断言方式
  • 小明的Java面试奇遇之商城系统的技术挑战与实战
  • 考研系列—操作系统:第五章、输入输出(I/O)管理
  • Cesium快速入门到精通系列教程三
  • c++学习值---模版
  • 【计算机网络】第3章:传输层—可靠数据传输的原理
  • [蓝桥杯]外卖店优先级
  • 【极客日常】分享go开发中wire和interface配合的一些经验
  • C++ 之 多态 【虚函数表、多态的原理、动态绑定与静态绑定】
  • Scratch节日 | 六一儿童节射击游戏
  • ​​技术深度解析:《鸿蒙5.0+:全场景能效的产业革命》​