1、 历史

​ 在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代(例如,public static final String male )。JKD1.5之后使用 Java 枚举类型 enum 可以更贴近地表示这种常量。

2、枚举的定义

2.1 简单枚举定义

GenderEnum 性别枚举

  1. /*
  2. 性别枚举
  3. */
  4. public enum GenderEnum {
  5. //定义枚举类型的变量(所有定义的变量都是当前枚举类型的实例名)
  6. //默认所有的定义变量,都是public static final 类型,不需要手动声明,而且一般都是大写
  7. MAN,WOMAN
  8. }

测试

  1. public static void main(String[] args) {
  2. Student student = new Student();
  3. student.setStuNo("S001");
  4. student.setStuName("张三");
  5. //枚举类型赋值,都只能赋值为枚举中已经定义的实例名
  6. student.setGender(GenderEnum.MAN);
  7. student.setGender(GenderEnum.WOMAN);
  8. //非指定枚举类型,都不需要赋值,编译异常
  9. //student.setGender("男");
  10. student.setStuAge(20);
  11. System.out.println(student);
  12. }

运行结果:

2.2 带参枚举定义

  1. 必须声明内部私有属性,方便获取枚举类型实例的参数值

  2. 必须声明跟实例对象相符合的内部私有构造方法

  3. 对外声明get方法,只允许通过枚举的实例获取对应参数,不允许setter方法,枚举实例是通过构造方法初始化的

UserStatusEnum 用户状态枚举

  1. /*
  2. 用户状态
  3. */
  4. public enum UserStatusEnum {
  5. //带参数枚举类型
  6. STATUS_NORMAL("0","正常"),
  7. STATUS_LOCK("1","锁定"),
  8. STATUS_OFF("1","注销");
  9. //必须声明内部私有属性,方便获取枚举类型实例的参数值
  10. private String statusCode;
  11. private String statusMsg;
  12. //必须声明跟实例对象相符合的内部私有构造方法
  13. private UserStatusEnum(String statusCode,String statusMsg){
  14. this.statusCode = statusCode;
  15. this.statusMsg = statusMsg;
  16. }
  17. //对外声明get方法,只允许通过枚举的实例获取对应参数,不允许setter方法,枚举实例是通过构造方法初始化的
  18. public String getStatusCode() {
  19. return statusCode;
  20. }
  21. public String getStatusMsg() {
  22. return statusMsg;
  23. }
  24. //一般,在枚举类中,要提供一个静态的普通方法,当你不知道枚举的定义,
  25. //只知道状态码时,方便获取对应的说明
  26. public static String getMegsByCode(String statusCode){
  27. //枚举的遍历
  28. for (UserStatusEnum statusEnum : UserStatusEnum.values()){
  29. //判断传入的状态码,是否在内部定义中存在
  30. if(statusEnum.statusCode.equals(statusCode)){
  31. return statusEnum.statusMsg;
  32. }
  33. }
  34. //不存在
  35. return null;
  36. }
  37. }

测试

  1. public class TestUserStatusEnum {
  2. public static void main(String[] args) {
  3. //测试带参枚举
  4. //假设当前用户状态枚举是锁定
  5. System.out.println(UserStatusEnum.STATUS_NORMAL.getStatusCode()); //0
  6. System.out.println(UserStatusEnum.STATUS_NORMAL.getStatusMsg()); //正常
  7. //假设当前用户状态枚举是注销
  8. System.out.println(UserStatusEnum.STATUS_OFF.getStatusCode()); //1
  9. System.out.println(UserStatusEnum.STATUS_OFF.getStatusMsg()); //注销
  10. //测试枚举提供的普通方法
  11. //假设知道用户的状态是0,如何获取对应的说明
  12. System.out.println(UserStatusEnum.getMegsByCode("0")); //正常
  13. }
  14. }

3、Switch选择结构支持的类型

byte
char
short
int
Enum(枚举,JDK1.5增加)
String (JDK1.7增加)

注意:一旦入参是一个枚举类型的实例,所有的case选择允许值都必须是枚举类型声明的实例常量;

  1. //验证switch选择结构支持的类型:int及以下(int short char byte) 枚举 String
  2. switch(UserStatusEnum.STATUS_NORMAL){ //正常
  3. //一旦入参是一个枚举类型的实例,所有的选择允许值都必须是枚举类型声明的实例常量
  4. case STATUS_OFF:
  5. System.out.println("注销");
  6. break;
  7. case STATUS_LOCK:
  8. System.out.println("锁定");
  9. break;
  10. case STATUS_NORMAL:
  11. System.out.println("正常");
  12. break;
  13. }

Java实用类-Enum(枚举)的更多相关文章

  1. 【学习笔记】Java实用类:枚举(Enum)

    Java API(Java Application Programming Interface)Java应用程序编程接口... 实用类:Java API提供了几个常用包: 1.java.lang:编写 ...

  2. Java中Enum枚举的使用

    三种不同的用法 注意项: 1.在switch中使用枚举能使代码的可读性更强.   2.如果要自定义方法,那么必须在enum实例序列的最后添加分号.而且Java要求必须先定义enum实例.   3.所有 ...

  3. java之enum枚举(2015年05月28日)

    背景: 今天启动了一个新的项目,由于要从之前的旧项目中拿过来一些代码,所以就看了下公司之前项目代码,发现有定义的常量类,也有枚举类,然后就在想着两者的功能差不多,那他们之间到底有什么区别呢,所以就决定 ...

  4. Java 基础 enum枚举类 的创建/使用/接口继承 ,以及手动创建枚举类的对象为:public static final

    笔记: import java.lang.*; /**一:枚举类 : enum Season implements info { s1(),s2(),s3(),s4() }; //s1--s4 放在S ...

  5. java 中 enum 枚举的使用

    package test3; public final class Program {    public static void main(String[] args) {       // Sys ...

  6. Rhythmk 一步一步学 JAVA (18): Enum枚举学习

    枚举定义: public enum SizeEnum { SMALL, BIG, BIGEST }; public enum SizeStringEnum { SMALL("小") ...

  7. MyBatis 中如何调用 Java 的 enum (枚举) 字段

    事先作成一 enum,如下: public enum CityCode { ALL("000"), BEIJING("010"), SHANGHAI(" ...

  8. java enum(枚举)的使用

    在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集” ...

  9. java enum(枚举)使用详解 + 总结

    enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始 ...

随机推荐

  1. SpringMVC的数据响应-回写数据

    1.直接返回字符串 其他具体代码请访问chilianjie @RequestMapping("/report5") public String save5(HttpServletR ...

  2. 2021年3月-第02阶段-前端基础-HTML+CSS阶段-Day03

    HTML5 第三天 一. 认识 3D 转换 3D 的特点 近大远小 物体和面遮挡不可见 三维坐标系 x 轴:水平向右 -- 注意:x 轴右边是正值,左边是负值 y 轴:垂直向下 -- 注意:y 轴下面 ...

  3. 全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图最新数据免费下载 支持shp geojson json sql格式

    关键词: 省市区三级, 乡镇四级, 全国, 行政区划, 坐标边界, 矢量数据, 地理围栏, 免费下载, 2018 2019 2020 2021 2022年份, 最新数据, 长期更新, 开源维护, 支持 ...

  4. 快速排序算法 - go实现

    在分析redis集群中大Key的时候,通常都采用分析rdb文件的方式:但是这种方式需要在每一台redis服务器上部署分析程序及分析脚本,而像salt之类的工具运维没有开放给我们使用,一台一台部署不好管 ...

  5. jsp第三次作业

    1.在jsp页面中使用include动态标记加载音频 <%@ page language="java" import="java.util.*" page ...

  6. JAVA IDEA连接mysql遇到的问题

    Mysql-connector-java驱动问题 因为缺乏驱动而无法成功连接数据库 下载驱动(教程) 相关网址 安装驱动 简单图示

  7. Redis实现并发阻塞锁方案

    由于用户同时访问线上的下订单接口,导致在扣减库存时出现了异常,这是一个很典型的并发问题,本篇文章为解决并发问题而生,采用的技术为Redis锁机制+多线程的阻塞唤醒方法. 在实现Redis锁机制之前,我 ...

  8. 流量录制回放工具jvm-sandbox-repeater入门篇——服务部署

    趋于当前技术不断更新.产品功能多元化之下,流量回放的热度也是越来越高. 在前一段时间,测试团队也提到阿里开源的流量回放工具 jvm-sandbox-repeater 我个人就先尝试一下,期间还是遇到一 ...

  9. 【面试普通人VS高手系列】讲一下wait和notify这个为什么要在synchronized代码块中?

    一个工作七年的小伙伴,竟然不知道"wait"和"notify"为什么要在Synchronized代码块里面. 好吧,如果屏幕前的你也不知道,请在评论区打上&qu ...

  10. os、json、sys、subprocess模块

    os模块 import os 1.创建目录(文件夹) os.mkdir(r'a') # 相对路径 只能创建单级目录 os.makedirs(r'a\b') # 可以创建单级和多及目录 2.删除目录 o ...