面向对象【枚举类】

请添加图片描述

文章目录

  • 枚举类
    • 定义枚举类
    • enum 方式定义的要求和特点
  • enum 中常用方法
    • 实现接口的枚举类

枚举类

枚举类是一种特殊的类,它用于定义一组固定数量的常量。枚举类在实际开发中非常有用,因为它们可以增加代码的可读性和可维护性。本文将介绍Java枚举类的定义、常用方法以及一些最佳实践。

枚举类的主要作用有以下几个方面:

  1. 定义常量集合: 枚举类可以用于定义一组有限的常量集合,例如一周的每一天、星期几、颜色等。这样的定义可以提高代码的可读性,因为它们明确了程序员的意图,并且避免了使用散列常量或者魔术数字。

  2. 类型安全性: 枚举类提供了类型安全性,即编译器可以确保在使用枚举常量时不会出现拼写错误或者非法值。因为枚举常量在编译时就已经确定,所以不会出现运行时错误。

  3. 简化代码: 枚举类可以帮助简化代码,因为它们自动提供了一些常用的方法,如比较、遍历等。此外,枚举常量本身也可以具有属性和方法,使得代码更加灵活和易于维护。

  4. 替代常量集合: 在传统的Java编程中,常常使用整型常量或者字符串常量来表示一组相关的常量。然而,这种方式存在着不便利和易出错的问题。枚举类提供了一种更加优雅和类型安全的替代方案。

  5. switch语句的替代: 枚举类在替代复杂的switch语句时非常有用。通过将每个case与一个枚举常量相关联,可以使代码更加清晰和易于理解。

定义枚举类

在Java中,使用enum定义枚举类。例如:

public enum ClassName {CONSTANT1,   // 枚举常量1CONSTANT2,   // 枚举常量2// 更多枚举常量
}public enum Day {MONDAY, TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
}

定义了一个Day枚举类,其中包含了一周的每一天作为常量。注意,这些常量默认都是public static final类型的,因此可以在其他类中直接访问。

enum 方式定义的要求和特点

  • 枚举类的常量对象列表必须在枚举类的首行,因为是常量,所以建议大写。
  • 列出的实例系统会自动添加 public static final 修饰。
  • 如果常量对象列表后面没有其他代码,那么“;”可以省略,否则不可以省略“;”。
  • 编译器给枚举类默认提供的是 private 的无参构造,如果枚举类需要的是无参构造,
    就不需要声明,写常量对象列表时也不用加参数
  • 如果枚举类需要的是有参构造,需要手动定义,有参构造的 private 可以省略,调用
    有参构造的方法就是在常量对象名后面加(实参列表)就可以。
  • 枚举类默认继承的是 java.lang.Enum 类,因此不能再继承其他的类型。
  • • JDK5.0 之后 switch,提供支持枚举类型,case 后面可以写枚举常量名,无需添加枚
    举类作为限定。

enum 中常用方法

枚举类提供了一些常用的方法来处理枚举常量

  1. values()

values()方法返回枚举类中定义的所有枚举常量的数组。这个方法非常有用,可以用于遍历枚举常量。

public enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}// 使用values()方法遍历枚举常量
for (Day day : Day.values()) {System.out.println(day);
}
  1. ordinal()

ordinal()方法返回枚举常量在枚举中的位置,位置从0开始计数。通常情况下,枚举常量的顺序是它们在枚举类中定义的顺序。

Day day = Day.MONDAY;
System.out.println(day.ordinal()); // 输出 0
  1. name()

name()方法返回枚举常量的名称。

Day day = Day.MONDAY;
System.out.println(day.name()); // 输出 MONDAY
  1. valueOf(String name)

valueOf(String name)方法根据指定的名称返回相应的枚举常量。这个方法通常与枚举类的名称一起使用。

Day day = Day.valueOf("MONDAY");
System.out.println(day); // 输出 MONDAY
  1. toString()

toString()方法返回枚举常量的字符串表示形式。默认情况下,它返回枚举常量的名称。

Day day = Day.MONDAY;
System.out.println(day.toString()); // 输出 MONDAY

实现接口的枚举类

枚举类可以实现一个或多个接口。在Java中,枚举类与普通类一样,可以实现接口,这使得枚举类可以拥有接口的所有特性和方法。

假设有一个接口Shape表示形状,并且有一个枚举类Color表示颜色,我们可以让Color枚举类实现Shape接口,以便为每种颜色指定特定的形状

public interface Shape {void draw();
}public enum Color implements Shape {RED {@Overridepublic void draw() {System.out.println("Draw a red shape");}},GREEN {@Overridepublic void draw() {System.out.println("Draw a green shape");}},BLUE {@Overridepublic void draw() {System.out.println("Draw a blue shape");}};
}public class Main {public static void main(String[] args) {Color.RED.draw();Color.GREEN.draw();Color.BLUE.draw();}
}// 输出结果:
// Draw a red shape
// Draw a green shape
// Draw a blue shape

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

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

相关文章

spring maven项目 实时接口请求次数及时间发送到grafana监控_亲测成功

spring maven项目 实时接口请求次数及时间发送到grafana监控_亲测成功 说明: spring项目使用aop方式拿到请求接口uri,算出从请求到响应的耗时, 然后使用statsd包发送udp数据给grafana去展示. 完全不影响代码性能和稳定性,因为使用udp协议发送,就算grafana那边挂了,也不影响项…

【C++】6-2 交换函数2 分数 10

6-2 交换函数2 分数 10 全屏浏览 切换布局 作者 刘利 单位 惠州学院 根据题目需求&#xff0c;编写一个交换函数Swap。 裁判测试程序样例&#xff1a; #include <iostream> using namespace std; class pen{private:string brand;string color;double price;publi…

Java基于微信小程序的校园请假系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#…

【Java程序设计】【C00370】基于(JavaWeb)Springboot的公司进存销管理系统(有论文)

TOC 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击卡片…

OJ : 1090 :整数幂(多实例测试)

题目描述 求A^B的最后三位数表示的整数&#xff08;1<A,B<1000&#xff09; 输入 n个测试实例&#xff0c;每个实例给出两个正整数A,B 输出 输出A^B的最后三位&#xff08;没有前导0&#xff09; 样例输入 2 2 3 12 6 样例输出 8 984 思路&#xff1a; 这个题…

c# 更改网卡的默认网关

前言: 通过程序更改网卡网关 公司内有多个网络出口,其中一个为固定IP的 带宽只有60M用于应用系统访问, 一个是一条千兆带宽的ADSL,但是只有电信内网IP。做开发调试尤其是企业微信接口涉及到接口白名单IP&#xff0c;需要走固定IP&#xff0c;而日常一些下载当然我选择用千兆带宽…

视频记录历史播放位置效果

简介 每次打开页面视频从上一次的播放位置开始播放 利用lodash库做节流 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

UI界面设计是什么?一篇文章带你全面了解

伴随着因特网的飞速发展&#xff0c;很多与因特网相关的职位都衍生出来了&#xff0c;UI 界面设计师是因特网的核心职位之一。UI 界面设计已经渗透到我们生活的各个方面&#xff0c;包括网站、应用程序或其它数字平台上的按钮、菜单布局、配色方案和排版等。很多人认为 UI 界面…

具有徊滞特性的欠压锁定功能的B3842/43/44是专为脱线和Dc-Dc开关电源应用设计的

B3842/43/44是专为脱线和Dc-Dc开关电源应用设计的恒频电流型Pwd控制器内部包含温度补偿精密基准、供精密占空比调节用的可调振荡器、高增益混放大器、电流传感比较器和适合作功率MOST驱动用的大电流推挽输出颇以及单周期徊滞式限流欠压锁定、死区可调、单脉冲计数拴锁等保护电路…

Oracle 去除重复记录SQL

在Oracle数据库中&#xff0c;可以使用DELETE语句删除多个表中的数据&#xff0c;也可以使用INNER JOIN、LEFT JOIN、RIGHT JOIN等连接操作来删除多个表中的数据。 下面是一些示例&#xff1a; 删除两个表中相同的记录 DELETE FROM table1 WHERE EXISTS (SELECT 1 FROM table2…

公历农历干支互转

日历描写的是地球上观星的规律 公历&#xff08;阳历&#xff1a;太阳历&#xff09;、农历&#xff08;阴历&#xff1a;月亮历&#xff09;互转 1.1900-2100农历的润大小信息表 农历一年有多少天&#xff1f; 农历一年通常是354天或355天&#xff0c;但有时也会出现384天或…

【Java程序设计】【C00369】基于(JavaWeb)Springboot的笔记记录分享平台(有论文)

[TOC]() 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击…

BSV区块链的应用开发前景——通过标准化来促进创新

​​发表时间&#xff1a;2024年3月5日 近年来区块链领域的发展日新月异&#xff0c;各种全新的技术和方法论正在迅猛涌现。在这个瞬息万变的环境之中&#xff0c;标准化不仅仅会为开发者们带来便利&#xff0c;同时也促进了应用之间的互操作性&#xff0c;并且推动着生态系统的…

SAP ABAP-BOPF基础训练-01简介与架构

1. 介绍-Introduction ① BOPF是什么&#xff1f;BOPF(the Business Object Processing Framework)&#xff1a;业务对象处理框架 提供了一种增量和模块化的方法&#xff0c;以符合企业面向服务体系结构(eSOA)的方式实现业务对象&#xff1b; 部分平台基础层&#xff0c;软件组…

【python实现华为OD机试真题】阿里巴巴找黄金宝箱(II)【2023 Q2 | 100分】

题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子。每个箱子上面贴有箱子中藏有金币的数量。从金币数量中选出一个数字集合,并销毁贴有这些数字的每个箱子如果能销毁一半及以上的箱子,则返回这个数字集合的最小大小。…

UI设计师必备软件:2024年趋势解读!

设计的两个关键方面是用户界面 (UI) 和用户体验 (UX)&#xff0c;UI设计侧重于人们如何与产品互动的审美元素&#xff0c;UX设计更侧重于人们如何使用产品&#xff0c;无论你的重点是什么 UX 还是 UI&#xff0c;或者你是否试图将两者结合起来&#xff0c;你需要高质量的UI设计…

【C++】share_ptr详解

一、share_ptr 的简单使用 1.1、基本用法 从较浅的层面看&#xff0c;智能指针是利用了一种叫做RAII&#xff08;资源获取即初始化&#xff09;的技术对普通的指针进行封装&#xff0c;这使得智能指针实质是一个对象&#xff0c;行为表现的却像一个指针。 智能指针的作用是防…

【MySQL数据库】数据类型和简单的增删改查

目录 数据库 MySQL的常用数据类型 1.数值类型&#xff1a; 2.字符串类型 3.日期类型 MySQL简单的增删改查 1.插入数据&#xff1a; 2.查询数据&#xff1a; 3.修改语句&#xff1a; 4.删除语句&#xff1a; 数据库 平时我们使用的操作系统都把数据存储在文件中&#…

PTA天梯赛习题 L2-005 集合相似度

题目 给定两个整数集合&#xff0c;它们的相似度定义为&#xff1a;Nc​/Nt​100%。其中Nc​是两个集合都有的不相等整数的个数&#xff0c;Nt​是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。 输入格式&#xff1a; 输入第一行给出一个正…

深入了解服务器硬件:从基础知识到实际应用

在当今数字化的社会中&#xff0c;服务器扮演着至关重要的角色&#xff0c;它们是支撑互联网、云计算、大数据等技术发展的基石。而理解服务器硬件的基础知识对于从事IT领域的人员来说至关重要。本文将从服务器硬件的基础知识出发&#xff0c;介绍服务器硬件的组成、作用及其在…