Java实用类-Enum(枚举)
1、 历史
在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代(例如,public static final String male )。JKD1.5之后使用 Java 枚举类型 enum 可以更贴近地表示这种常量。
2、枚举的定义
2.1 简单枚举定义
GenderEnum 性别枚举
/*
性别枚举
*/
public enum GenderEnum {
//定义枚举类型的变量(所有定义的变量都是当前枚举类型的实例名)
//默认所有的定义变量,都是public static final 类型,不需要手动声明,而且一般都是大写
MAN,WOMAN
}
测试
public static void main(String[] args) {
Student student = new Student();
student.setStuNo("S001");
student.setStuName("张三");
//枚举类型赋值,都只能赋值为枚举中已经定义的实例名
student.setGender(GenderEnum.MAN);
student.setGender(GenderEnum.WOMAN);
//非指定枚举类型,都不需要赋值,编译异常
//student.setGender("男");
student.setStuAge(20);
System.out.println(student);
}
运行结果:

2.2 带参枚举定义
必须声明内部私有属性,方便获取枚举类型实例的参数值
必须声明跟实例对象相符合的内部私有构造方法
对外声明get方法,只允许通过枚举的实例获取对应参数,不允许setter方法,枚举实例是通过构造方法初始化的
UserStatusEnum 用户状态枚举
/*
用户状态
*/
public enum UserStatusEnum {
//带参数枚举类型
STATUS_NORMAL("0","正常"),
STATUS_LOCK("1","锁定"),
STATUS_OFF("1","注销");
//必须声明内部私有属性,方便获取枚举类型实例的参数值
private String statusCode;
private String statusMsg;
//必须声明跟实例对象相符合的内部私有构造方法
private UserStatusEnum(String statusCode,String statusMsg){
this.statusCode = statusCode;
this.statusMsg = statusMsg;
}
//对外声明get方法,只允许通过枚举的实例获取对应参数,不允许setter方法,枚举实例是通过构造方法初始化的
public String getStatusCode() {
return statusCode;
}
public String getStatusMsg() {
return statusMsg;
}
//一般,在枚举类中,要提供一个静态的普通方法,当你不知道枚举的定义,
//只知道状态码时,方便获取对应的说明
public static String getMegsByCode(String statusCode){
//枚举的遍历
for (UserStatusEnum statusEnum : UserStatusEnum.values()){
//判断传入的状态码,是否在内部定义中存在
if(statusEnum.statusCode.equals(statusCode)){
return statusEnum.statusMsg;
}
}
//不存在
return null;
}
}
测试
public class TestUserStatusEnum {
public static void main(String[] args) {
//测试带参枚举
//假设当前用户状态枚举是锁定
System.out.println(UserStatusEnum.STATUS_NORMAL.getStatusCode()); //0
System.out.println(UserStatusEnum.STATUS_NORMAL.getStatusMsg()); //正常
//假设当前用户状态枚举是注销
System.out.println(UserStatusEnum.STATUS_OFF.getStatusCode()); //1
System.out.println(UserStatusEnum.STATUS_OFF.getStatusMsg()); //注销
//测试枚举提供的普通方法
//假设知道用户的状态是0,如何获取对应的说明
System.out.println(UserStatusEnum.getMegsByCode("0")); //正常
}
}
3、Switch选择结构支持的类型
| byte |
|---|
| char |
| short |
| int |
| Enum(枚举,JDK1.5增加) |
| String (JDK1.7增加) |
注意:一旦入参是一个枚举类型的实例,所有的case选择允许值都必须是枚举类型声明的实例常量;
//验证switch选择结构支持的类型:int及以下(int short char byte) 枚举 String
switch(UserStatusEnum.STATUS_NORMAL){ //正常
//一旦入参是一个枚举类型的实例,所有的选择允许值都必须是枚举类型声明的实例常量
case STATUS_OFF:
System.out.println("注销");
break;
case STATUS_LOCK:
System.out.println("锁定");
break;
case STATUS_NORMAL:
System.out.println("正常");
break;
}
Java实用类-Enum(枚举)的更多相关文章
- 【学习笔记】Java实用类:枚举(Enum)
Java API(Java Application Programming Interface)Java应用程序编程接口... 实用类:Java API提供了几个常用包: 1.java.lang:编写 ...
- Java中Enum枚举的使用
三种不同的用法 注意项: 1.在switch中使用枚举能使代码的可读性更强. 2.如果要自定义方法,那么必须在enum实例序列的最后添加分号.而且Java要求必须先定义enum实例. 3.所有 ...
- java之enum枚举(2015年05月28日)
背景: 今天启动了一个新的项目,由于要从之前的旧项目中拿过来一些代码,所以就看了下公司之前项目代码,发现有定义的常量类,也有枚举类,然后就在想着两者的功能差不多,那他们之间到底有什么区别呢,所以就决定 ...
- Java 基础 enum枚举类 的创建/使用/接口继承 ,以及手动创建枚举类的对象为:public static final
笔记: import java.lang.*; /**一:枚举类 : enum Season implements info { s1(),s2(),s3(),s4() }; //s1--s4 放在S ...
- java 中 enum 枚举的使用
package test3; public final class Program { public static void main(String[] args) { // Sys ...
- Rhythmk 一步一步学 JAVA (18): Enum枚举学习
枚举定义: public enum SizeEnum { SMALL, BIG, BIGEST }; public enum SizeStringEnum { SMALL("小") ...
- MyBatis 中如何调用 Java 的 enum (枚举) 字段
事先作成一 enum,如下: public enum CityCode { ALL("000"), BEIJING("010"), SHANGHAI(" ...
- java enum(枚举)的使用
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集” ...
- java enum(枚举)使用详解 + 总结
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始 ...
随机推荐
- golang 中 sync.Mutex 的实现
mutex 的实现思想 mutex 主要有两个 method: Lock() 和 Unlock() Lock() 可以通过一个 CAS 操作来实现 func (m *Mutex) Lock() { f ...
- shiro+springboot分析思路
文章目录 前言 一.为什么要使用shiro 二.使用步骤 1.如何认证和授权 2.如何获取数据 总结 前言 shiro和spring security等安全框架可以用户管理和权限认证 一.为什么要使用 ...
- Blazor 生命周期
执行周期 1. SetParametersAsync 2. OnInitializedAsync(调用两次) 和 OnInitialized: 3. OnParametersSetAsync 或 On ...
- Postman 正确使用姿势
前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介: Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将 ...
- UML 类之间的关系
统一建模语言(Unified Modeling Language,UML) 作用:对软件系统进行说明 如果说软件系统是一本小说的话,那么 UML 就是将小说动漫化. 也许你看过这本小说,但是时间一长, ...
- XCTF练习题---MISC---ext3
XCTF练习题---MISC---ext3 flag:flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj} 解题步骤: 1.下载附件,观察题目,发现题目跟Linux有关,我们换 ...
- [AcWing 774] 最长单词
点击查看代码 #include<iostream> using namespace std; string str, res; int main() { while (cin >&g ...
- 超耐心地毯式分析,来试试这道看似简单但暗藏玄机的Promise顺序执行题
壹 ❀ 引 就在昨天,与朋友聊到JS基础时,她突然想起之前在面试时,遇到了一道难以理解的Promise执行顺序题.由于我之前专门写过手写promise的文章,对于部分原理也还算了解,出于兴趣我便要了这 ...
- junethack使用指南
本文面向有志于参加Nethack六月衍生大赛,且具有一定英文水平的玩家. 首先,在Junethack服务器页面挑一个在线服务器的网站,个人推荐 hardfought.org,因为访问速度较快. 然后, ...
- 阿里CBU技术面试小结
一个执着于技术的公众号 前言 今天给大家分享一篇胡文兴同学阿里CBU技术面试的自我总结,希望通过本篇文章也让正在准备求职面试的你有所帮助. 本篇文章已经征得原作者同意转载至本公众号,并且征得他的同意标 ...