目录
枚举描述
枚举类是JDK1.5中才出现的新特性,它是一种特殊的数据类型,在Java中用enum关键字来修饰,enum的全称是enumeration。所有被enum修饰的类都会默认的继承自java.lang.Enum这个类,而不是Object类。
-
通过编译后生成的枚举类发现枚举类默认继承了Enum类并且使用final修饰,所以枚举类不能被继承也无法继承其他类。
-
枚举类变量必须放在第一行,如果枚举类变量有构造器,那么分号必须加上,否则可以省略。
-
枚举类的构造器必须是private的,系统会自动设置为private,我们也可以自己加上,但是不能用public等修饰符,否则会报错。
public enum StatusCodes { CODE_000000("M0U000000", "成功"), CODE_510000("M0U510000", "参数错误,无效请求参数"), CODE_520000("M0U520000", "第三方服务调用异常"), CODE_520001("M0U520001", "第三方服务调用连接超时"), CODE_520002("M0U520002", "第三方服务调用读超时"), CODE_530000("M0U530000", "消息队列生产数据失败"), CODE_540000("M0U540000", "第三方SFTP服务器失败"), CODE_550000("M0U550000", "对象存储服务调用失败"), CODE_560000("M0U560000", "RPC调用第三方服务异常"), CODE_570000("M0U570000", "系统繁忙请稍后再试..."), CODE_590000("M0U590000", "读取配置文件异常"), CODE_999999("M0S999999", "系统内部异常"); private String statusCode; private String statusDesc; StatusCodes(String statusCode, String statusDesc) { this.statusCode = statusCode; this.statusDesc = statusDesc; } public String getStatusCode() { return statusCode; } public void setStatusCode(String statusCode) { this.statusCode = statusCode; } public String getStatusDesc() { return statusDesc; } public void setStatusDesc(String statusDesc) { this.statusDesc = statusDesc; } }
常用方法
-
valueOf(String name) 方法:返回具有指定名称的指定枚举类型的枚举常量(区分大小写),如果没有则报错。
-
values()方法:返回枚举类中包括所有枚举对象的数组。该方法可以很方便地遍历枚举值。
-
name()方法:返回当前枚举类对象的名称。它和toString()方法是一模一样的。
-
ordinal()方法:返回此枚举常数的序数(其枚举声明中的位置,其中初始常数的序数为零)。
-
toString()方法:返回当前枚举类对象的名称,等同于name()方法。
枚举用法
枚举类定义抽象方法
public enum EnumDemo { FIRST{ @Override public String getInfo() { return "FIRST TIME"; } }, SECOND{ @Override public String getInfo() { return "SECOND TIME"; } }; /** * 定义抽象方法 * @return */ public abstract String getInfo(); //测试 public static void main(String[] args){ System.out.println("F:"+EnumDemo3.FIRST.getInfo()); System.out.println("S:"+EnumDemo3.SECOND.getInfo()); } } 结果: F:FIRST TIME S:SECOND TIME
枚举类实现接口
interface Behaviour{ String show(); } public enum Season implements Behaviour{ SPRING("春暖花开"), SUMMER("夏日炎炎"), AUTUMN("秋高气爽"), WINNER("冬暖夏凉");//此时的分号不能省略 private String name; //系统默认构造器是private,而且必须是private的,用public则会报错 Season(String name) { this.name = name; } @Override public String show() { return this.name; } } class Test{ public static void main(String[] args) { for (Season season:Season.values()){ System.out.println(season.show()); } } }
public interface Season { enum Spring implements Season{ //立春,雨水,清明 SPRING_BEGINS,RAIN,TOMB_SWEEPING } enum Summer implements Season{ //夏至,芒种,小暑,大暑 SUMMER_BEGINS,GRAIN_INE_EAR,SLIGHT_HEAD,GREAT_HEAD } enum AUTUMN implements Season{ //立秋,寒露,霜降 AUTUMN_BEGINS,COLD_DEW,FROST } enum WINTER implements Season{ //立冬,小雪,大雪,冬至 WINTER_BEGINS,LIGHT_SNOW,HEAVY_SNOW,WINTER_SOLSTICE_FESTIVAL } } class Test{ public static void main(String[] args) { //遍历Spring Season.Spring[] values = Season.Spring.values(); for (Season season:values){ System.out.println(season); } } } //运行结果: //SPRING_BEGINS //RAIN //TOMB_SWEEPING