关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用。这是一种非常有用的功能。—引用于java编程思想19章
本文专业术语和解释来源于java编程思想第19章 枚举类型,本人加以整理和细化,不喜勿喷
enum的基本特性
一、首先简单描述下enum的values()方法。调用enum的values()方法,可以遍历enum实例,直接代码展示好理解一点。如下:
enum qhyu{
yuqihai,qhyu1
}
public class EnumTest {
public static void main(String[] args) {
for(qhyu s:qhyu.values()){
System.out.println(s);
}
}
}
输出结果:
yuqihai
qhyu1
二、ordinal()方法返回一个int值,这是每个enum实例在声明时的次序,从0开始。示例如下:
enum qhyu{
b,cb
}
public class EnumTest {
public static void main(String[] args) {
for(qhyu s:qhyu.values()){
System.out.println(s+":"+s.ordinal());
}
}
}
输出结果:
b:0
cb:1
三、Enum类实现了comparable接口,所以具有compareTo()方法。示例如下:
enum qhyu{
b,cb
}
public class EnumTest {
public static void main(String[] args) {
for(qhyu s:qhyu.values()){
System.out.println(s.compareTo(qhyu.b));
}
}
}
输出结果:
0
1
向enum中添加新方法
除了不能继承自一个enum之外,我们基本上可以将enum看做一个常规的类,也就是说,我们可以向enum中添加方法。enum甚至可以有自己的main方法。简单做了一个示例如下:
/**
* 功能描述:创建一个枚举类
* @author:yqh
* @date:2018年3月27日
*/
public enum OhEnum {
中国("大中华地区"),
美国("呵呵"),
日本("不描述");
private String desc;
private OhEnum(String desc){
this.desc=desc;
}
/**
* 功能描述:获取描述信息
* @return desc
* @author:yqh
* @date:2018年3月27日
*/
public String getDesc() {
return desc;
}
public static void main(String[] args) {
for(OhEnum s:OhEnum.values()){
System.out.println(s+":"+s.getDesc());
}
}
}
输出结果:
中国:大中华地区
美国:呵呵
日本:不描述
这种情况应用比较多,目前我用到的地方就是在项目后台和前台比如 order(“退款中”,”退款失败”),在前台显示退款中,后台显示退款失败,总之灵活运用吧。
注意:如果在定义enum实例之前定义了任何的属性或者方法,编译器报错的
如果打算定义自己的方法,那么必须在enum实例序列的最后添加一个分号。
覆盖enum的方法
覆盖toString方法,将其修改为只有首字母大写的格式。
public enum SpaceShip {
SCOUT,CARGO,TRANSPORT,CRUISER,BATTLESHIP,MOTHERSHIP;
public String toString(){
String id = name();
String lower = id.substring(1).toLowerCase();
return id.charAt(0)+lower;
}
public static void main(String[] args) {
for(SpaceShip s:SpaceShip.values()){
System.out.println(s);
}
}
}
输出结果:
Scout
Cargo
Transport
Cruiser
Battleship
Mothership
switch语句中的enum
enum qhyu{
GREEN,YELLO,RED
}
public class EnumTest {
qhyu yu = qhyu.RED;
public void chage(){
switch (yu) {
case RED:
yu = qhyu.GREEN;
break;
case GREEN:
yu = qhyu.YELLO;
break;
case YELLO:
yu = qhyu.RED;
break;
}
}
public String toString(){
return "颜色啊"+yu;
}
public static void main(String[] args) {
EnumTest test = new EnumTest();
for(int i=0;i<7;i++){
System.out.println(test);
test.chage();
}
}
}
输出结果:
颜色啊RED
颜色啊GREEN
颜色啊YELLO
颜色啊RED
颜色啊GREEN
颜色啊YELLO
颜色啊RED
注意:EnumTest test = new EnumTest();时–>颜色啊RED