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. 原始 ...
随机推荐
- 爬虫---scrapy分布式和增量式
分布式 概念: 需要搭建一个分布式的机群, 然后在每一台电脑中执行同一组程序, 让其对某一网站的数据进行联合分布爬取. 原生的scrapy框架不能实现分布式的原因 调度器不能被共享, 管道也不能被共享 ...
- 安卓记账本开发学习day3
今天发现了新的错误 首先是AS警告杀毒系统对编译运行有影响,我目前只开了火绒,所以只需要在火绒里将SDK文件夹设置为信任即可 第二个错是在编译测试运行的时候,虚拟机能够正常打开,也launch suc ...
- Linux用命令设置终端背景色和字体颜色
用命令改 1.setterm -inversecreen on 背景字体颜色互换 2.setterm -inversecreen on 恢复默认 3.setterm -[选项] [参数] |-back ...
- 【虚拟机】VMware-open-vm-tools安装
open-vm-tools(VMware-tools的进化版) VMware Tool 和 open-vm-tools任选一样安装即可 在终端进入超级用户 换源下载,依次输入下面命令 sudo cp ...
- springmvc04-数据处理
数据处理 我们把它分为三种情况来分析,这样我们对于数据处理会有更好的理解 1.提交的域名称和处理方法的参数名一致 提交数据 : http://localhost:8080/hello?name=xi ...
- [cf]Codeforces Round #784(Div 4)
由于一次比赛被虐得太惨,,生发开始写blog的想法,于是便有了这篇随笔(找了个近期的cf比赛练练手(bushi))第一次写blog,多多包涵. 第二场cf比赛,第一场打的Div2,被虐太惨,所以第二场 ...
- [AcWing 795] 前缀和
点击查看代码 #include<iostream> using namespace std; const int N = 1e5 + 10; int a[N], s[N]; int mai ...
- javase集合 温故而知新
复习javase集合 1.为什么要有集合? 数组长度需要在初始化时确定大小,数据结构单一.因此集合出现了 2.数组和集合的区别 区别一:数组既可以存储基本数据类型,又可以存储引用类型,集合只能存储引用 ...
- java自学中出现的问题或者?
自学java之路,是如此的坎坷.经过一段时间的自学,我得出一些总结! 总结如下: 1. 在学习编程之路(Java)的,最基本的还是学习之路,对编程前程深感迷茫2. 网络中有许许多多的编程 ...
- 148. Sort List - LeetCode
Solution 148. Sort List Question 题目大意:对链表进行排序 思路:链表转为数组,数组用二分法排序 Java实现: public ListNode sortList(Li ...