Java 枚举类
在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代。而使用 java 枚举类型 enum 可以更贴近地表示这种常量。
语法要求:
- 任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内;
- 多个枚举成员之间使用逗号分隔;要注意必须在枚举实例的最后一个成员后添加分号
注意:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。
示例1:
下面代码定义了一个表示性别的枚举类型 SexEnum 和一个表示颜色的枚举类型 Color。
public enum SexEnum { male,female; } public enum Color { RED,BLUE,GREEN,BLACK; }
之后便可以通过枚举类型名直接引用常量,如 SexEnum.male
、Color.RED
。
Java 中的每一个枚举都继承自 java.lang.Enum 类。
当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例(如果枚举类中定义了抽象方法,则枚举类型成员必须重写该方法,如果定义了有参数构造方法,则枚举类型成员必须传入对应的参数),这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。
所有枚举实例都可以调用 Enum 类的方法,常用方法如下:
方法名称 | 描述 |
---|---|
values() | 以数组形式返回枚举类型的所有成员 |
valueOf() | 将普通字符串转换为枚举实例 |
compareTo() | 比较两个枚举成员在定义时的顺序 |
ordinal() |
获取枚举成员的索引位置,默认从0开始 |
name() |
返回此枚举常量的名称,与在其枚举声明中声明的完全相同。 |
示例2:
import org.apache.commons.lang.StringUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public enum DateFormatUtils { /** * 默认时间格式 */ YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd HH:mm:ss"), YYYY_MM_DD_HH_MM("yyyy-MM-dd HH:mm"), /** * 时间格式,精确到天 */ YYYY_MM_DD("yyyy-MM-dd"), /** * 没有标点符号 */ YYYYMMDDHHMMSS("yyyyMMddHHmmss"), YYYYMMDD("yyyyMMdd"), YYYYMMDDHHMMSSSSS("yyyyMMddHHmmssSSS"), YYYY_MM_DD_HH_MM_SS_SCORE("yyyy-MM-dd HH:mm:ss"), HH_MM("HH:mm"), MM_DD("MM-dd"); /** * 时间格式转换实例 */ private SimpleDateFormat format; DateFormatUtils(String formatStr) { format = new SimpleDateFormat(formatStr); format.setLenient(false); } /** * 时间对象转换成字符串 * * @param date * @return * @author: chenjunsheng * @date 2018年4月27日 */ public String date2Str(Date date) { if (date == null) { return null; } return format.format(date); } /** * 字符串转换成时间对象 * * @param date * @return * @throws ParseException * @author: chenjunsheng * @date 2018/6/5 */ public Date str2Date(String date) throws ParseException { if (StringUtils.isBlank(date)) { throw new NullPointerException("传进日期为空"); } return format.parse(date); } public static void main(String[] args) { System.out.println(DateFormatUtils.YYYY_MM_DD.date2Str(new Date()));// 2021-11-06 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?