Java中枚举类的创建及其应用场景

枚举类

枚举是一种特殊的类(编译之后也是生成class文件)可以实现接口,属于引用数据类型,枚举类是一组常量(枚举对象)的集合可以将枚举对象当作常量使用

自定义枚举类

自定义一个类实现枚举的效果

  • 构造器私有化: 因为枚举对象的个数是固定的,所以需要防止直接new对象

  • 创建一组固定的枚举对象: 在类的内部直接创建枚举对象并使用常量接收,常量名通常全部大写并且使用final修饰(防止类加载)

  • 去掉属性的setXxx方法: 防止枚举对象的属性被修改

public class Enumeration02 {public static void main(String[] args) {System.out.println(Season.AUTUMN);System.out.println(Season.SPRING);}
}
class Season {private String name;private String desc;// 定义了固定的四个季节对象public static final Season SPRING = new Season("春天", "温暖");public static final Season WINTER = new Season("冬天", "寒冷");public static final Season AUTUMN = new Season("秋天", "凉爽");public static final Season SUMMER = new Season("夏天", "炎热");private Season(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}

enum关键字

枚举类型的定义: 使用enum关键字替代class创建类, 此时创建的枚举类是final修饰的并且默认继承Enum类即此时不能再继承其它类了

  • 枚举对象: 必须放在枚举类的行首,多个枚举对象使用逗号间隔,最后一个以分号结尾
  • 创建枚举对象的格式: 常量名(构造方法的实参列表),使用无参构造器创建枚举对象时实参列表和小括号都可以省略
enum 枚举类型名 implements 接口 1,接口 2{// 枚举对象枚举对象(构造方法的实参列表)....;// 枚举类也可以有属性和构造方法
}
public class Enumeration03 {public static void main(String[] args) {System.out.println(Season2.AUTUMN);System.out.println(Season2.SUMMER);}
}
// 枚举类
enum  Season2 {// SPRING("春天", "温暖") 本质上还是public static final Season SPRING = new Season("春天", "温暖") SPRING("春天", "温暖"), WINTER("冬天", "寒冷"), AUTUMN("秋天", "凉爽"),SUMMER("夏天", "炎热");// 属性private String name;private String desc;// 无参构造器private Season2() {}private Season2(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}

Enum类常用方法

方法名功能
toString()Enum类重写后的toString方法可以得到枚举对象的名称
我们自己也可以重写toString方法返回枚举对象的属性信息
name()返回枚举对象的名字
ordinal()返回该枚举对象在枚举类中的次序,从0开始编号
static values()以数组的形式返回枚举类中所有的枚举对象
static valueOf(枚举字符串)根据字符串获取枚举类中对应的枚举对象,如果枚举对象不存在则报异常
compareTo(枚举对象)比较两个枚举常量的编号,返回前面的减后面的差值

compareTo方法和toString方法源码分析

public final int compareTo(E o) {//...return self.ordinal - other.ordinal;
}public String toString() {// 这个name是枚举对象的名称return name;
}
public class EnumMethod {public static void main(String[] args) {// 测试枚举对象的各种方法Season2 autumn = Season2.AUTUMN;// 测试nameSystem.out.println(autumn.name());// 测试ordinalSystem.out.println(autumn.ordinal());// 测试valuesSeason2[] values = Season2.values();System.out.println("===遍历取出枚举对象(增强for)====");for (Season2 season: values) {System.out.println(season);}// 测试valueOf,根据字符串"AUTUMN"查找Season2枚举类对应的枚举对象Season2 autumn1 = Season2.valueOf("AUTUMN");System.out.println("autumn1=" + autumn1);System.out.println(autumn == autumn1);// 测试compareTo,比较两个枚举常量System.out.println(Season2.AUTUMN.compareTo(Season2.SUMMER));
}

枚举类的应用

方法的返回结果只有两种情况的时候使用布尔类型,只有当方法的结果超过两种情况并且每一种情况都是一枚一枚可以列举出来的时候推荐使用枚举类

声明Week枚举类枚举对象包含星期一至星期日的定义

public class EnumExercise02 {public static void main(String[] args) {// 获取到所有的枚举对象即数组Week[] weeks = Week.values();// 遍历System.out.println("===所有星期的信息如下===");for (Week week : weeks) {System.out.println(week);}}
}
enum Week   {// 定义Week的枚举对象MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"),FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日");private String name;private Week(String name) {this.name = name;}// 重写toString方法用来返回枚举对象的属性信息@Overridepublic String toString() {// 这个name是枚举对象的属性信息return name;}
}

使用枚举类型来表示方法的多个返回结果,如果返回结果只有两种类型最好使用布尔类型(true和false正好可以表示两种不同的状态)

//自定义枚举类且没有属性
enum Result{SUCCESS, FAIL
}
public class EnumTest02 {public static void main(String[] args) {Result r = divide(10, 2);System.out.println(r == Result.SUCCESS ? "计算成功" : "计算失败");}// 计算两个int类型数据的商,返回结果是枚举类型public static Result divide(int a, int b){try {// 有可能发生java.lang.ArithmeticExceptionint c = a / b;return Result.SUCCESS;} catch (Exception e){return Result.FAIL;}}// 使用布尔类型表示方法的返回结果public static boolean divide(int a, int b){try {int c = a / b;return true;} catch (Exception e){return false;}}//规定计算成功返回1,计算失败返回0public static int divide(int a, int b){try {int c = a / b;return 1;} catch (Exception e){return 0;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zabbix监控Oracle表空间

警告 Oracle {#TABLESPACE}: 表空间数据文件已分配超过 {$ORACLE.TBS.UTIL.PCT.MAX.HIGH}% ,且表空间已使用超过{$ORACLE.TBS.USED.PCT.MAX.WARN}% 警告 min(/Oracle by ODBC-2/oracle.tbs_used_file_pct["{#TABLESPACE}"],5m)>{$ORACLE.TBS.USED.PC…

E云管家开发个人微信号批量修改好友备注

简要描述: 修改好友备注 请求URL: http://域名地址/modifyRemark 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说…

内部类——静态/非静态对外部类的访问

非静态内部类 可以访问外部类的非静态属性/静态属性,包括私有属性 静态内部类 1.只可以访问外部类的静态属性,包括静态私有属性 2.不可以可以访问外部类的非静态属性,包括私有属性

扫地机器人市场持续火爆,景联文科技数据采集标注方案助力扫地机器人智能化升级

随着消费者对智能家居和清洁卫生的需求增加,扫地机器人市场规模不断扩大。市场竞争也日益激烈,各品牌都在努力提升产品性能和服务质量,以获取更大的市场份额。 IDC的统计数据显示,今年双十一前两周(2023年10月23日至20…

Python入门05 print函数

目录 1 Python中的内置函数2 print函数介绍3 print函数的用途总结 1 Python中的内置函数 Python中内置了很多函数,我们可以直接调用,以下是一些常见的函数: abs():返回一个数的绝对值。all():判断一个可迭代对象中的…

Jmeter和Testlink自动化测试框架研究与实施

摘 要 目前基于Jmeter的接口自动化测试框架,大多只实现脚本维护和自动调度,无法与Testlink进行互通,实现测试方案与自动化实施流程连接,本文基于Testlink、Jmeter、Jenkins实现:通过Testlink统一维护接口自动化测试用…

基于python的IOS自动化测试小技巧

文章目录 一、Xpath 的使用1.1 使用Xpath读取固定位置的元素的内容一、Xpath 的使用 在执行IOS APP UI自动化测试时,需要使用到元素定位,我们使用WEditor进行元素的定位,操作流程可以查看基于Python的IOS自动化测试环境搭建 ,但是在一些特殊的场景需要灵活使用元素定位。 …

大数据平台/大数据技术与原理-实验报告--部署全分布模式HBase集群和实战HBase

实验名称 部署全分布模式HBase集群和实战HBase 实验性质 (必修、选修) 必修 实验类型(验证、设计、创新、综合) 综合 实验课时 2 实验日期 2023.11.07-2023.11.10 实验仪器设备以及实验软硬件要求 专业实验室&#xff…

diffusion model (九) EmuEdit技术小结

文章目录 背景1 核心思想2 方法2.1 方法建模2.2 数据工程2.2.1 image-edit任务类别定义2.2.2 指令集生成2.2.3 图片对的生成 3 结果 Paper: https://emu-edit.metademolab.com/assets/emu_edit.pdf Project web: https://emu-edit.metademolab.com/ Code: have not opensourc…

vue3 setup语法糖 搜索

前言 Vue.js 是一款流行的 JavaScript 框架,用于构建用户界面。它提供了一种简洁的方式来创建可维护和可测试的前端应用程序。Vue.js 的核心库只关注视图层,易于上手,同时与其他库或现有项目整合也非常方便。Vue 也完全能够为复杂的单页应用…

DBT踩坑第二弹

总结下dbt-spark踩到的坑,连接方式采用的是thrift连接 Kerberos认证。考虑到开源组件Kyuubi也是基于Hiveserver2,使用的thrift协议,所以采用Kyuubi执行SparkSQL。 官方文档给出的Thrift方式连接示例真的是简单,但是真是用起来真是…

Selenium+Python做web端自动化测试框架与实例详解教程

最近受到万点暴击,由于公司业务出现问题,工作任务没那么繁重,有时间摸索seleniumpython自动化测试,结合网上查到的资料自己编写出适合web自动化测试的框架,由于本人也是刚刚开始学习python,这套自动化框架目…

基于HTML+CSS+JavaScript的登录注册界面设计

一、界面效果: 二、HTML代码: 登录注册html: 登录成功html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <h1>登录成功!</h1> </body> <…

类指针压缩空间

一、类指针压缩介绍 压缩指针&#xff0c;指的是在 64 位的机器上&#xff0c;使用 32 位的指针来访问数据&#xff08;堆中的对象或 Metaspace 中的元数据&#xff09;的一种方式。 对象头中的 Class Pointer 默认占 8 个字节&#xff0c;开启 -XX:UseCompressedOops 后&…

跳表的学习记录

跳表&#xff08;Skip List&#xff09;是一种数据结构&#xff0c;它通过在多个层次上添加额外的前向指针来提高有序数据的搜索效率。跳表与其他常见的有序数据结构&#xff08;如二叉搜索树、平衡树如AVL树和红黑树、B树等&#xff09;相比&#xff0c;具有其独特的优缺点&am…

vue3中如何使用TypeScript?

在Vue 3中引入和使用TypeScript非常简单。下面是在Vue 3中引入和使用TypeScript的步骤&#xff1a; 创建Vue 3项目&#xff1a;首先&#xff0c;使用Vue CLI创建一个新的Vue 3项目。可以使用以下命令&#xff1a; vue create my-project在创建项目时&#xff0c;选择TypeScri…

国标GB28181安防监控平台EasyCVR周界入侵AI算法检测方案

在城市管理和公共安全领域&#xff0c;安全视频监控的重要性日益凸显。AI视频智能分析平台基于深度学习和计算机视觉技术&#xff0c;利用AI入侵算法&#xff0c;能够实时、精准地监测周界入侵行为。 TSINGSEE青犀在视频监控及AI视频智能分析领域拥有深厚的技术积累和丰富的实…

全面介绍SSO(单点登录)

全面介绍SSO&#xff08;单点登录&#xff09; SSO英文全称Single SignOn&#xff0c;单点登录。SSO是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比…

亮相史上规模最大高交会,Coremail展现邮件技术创新实力

11月19日&#xff0c;第二十五届中国国际高新技术成果交易会在深圳落下帷幕&#xff0c;作为国内邮件行业引领者&#xff0c;Coremail受邀参展。 展览现场&#xff0c;Coremail邮件解决方案及系列产品受到了众多参观者与业内人士的关注与好评。Coremail XT6邮件系统技术成熟&a…

【JavaEE初阶】——Linux 基本使用和 web 程序部署(下)

文章目录 前言一、Linux 常用命令 1.1 ls 命令 1.2 pwd 命令 1.3 cd 命令 1.4 touch 命令 1.5 cat 命令 1.6 mkdir 命令 1.7 rm 命令 1.8 cp 命令 1.9 mv 命令 1.10 man 命令 1.11 less 命令 1.12 head 命令 1.13 tail 命…