Java 枚举类

在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代。而使用 java 枚举类型 enum 可以更贴近地表示这种常量。

语法要求:

  1. 任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内;
  2. 多个枚举成员之间使用逗号分隔;要注意必须在枚举实例的最后一个成员后添加分号

注意:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。

 示例1:

下面代码定义了一个表示性别的枚举类型 SexEnum 和一个表示颜色的枚举类型 Color。

public enum SexEnum {
  male,female;
}
public enum Color {
  RED,BLUE,GREEN,BLACK;
}

之后便可以通过枚举类型名直接引用常量,如 SexEnum.maleColor.RED


Java 中的每一个枚举都继承自 java.lang.Enum 类。

当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例(如果枚举类中定义了抽象方法,则枚举类型成员必须重写该方法,如果定义了有参数构造方法,则枚举类型成员必须传入对应的参数),这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。

所有枚举实例都可以调用 Enum 类的方法,常用方法如下:

表 1 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
}
}

 

posted @   danielzzz  阅读(89)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示