枚举类型是Java 5中新增的,它是一种特殊的数据类型,一般用来表示常量
基本语法
java
修饰符 enum 枚举类型名称 {
枚举值1,枚举值2,...,枚举值n;
}
枚举值一般都是大写,只有枚举值时,最后的分号可以省略不写
枚举值默认都被 public static final 修饰
每个枚举值都可以看作是 枚举类的实例,当使用枚举值时,直接使用枚举名称调用即可
创建枚举
java
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY;
}
枚举中一些常用方法
方法名称 | 描述 |
---|---|
values() | 以数组形式返回枚举类型的所有成员 |
valueOf() | 将普通字符串转换为枚举实例 |
compareTo() | 比较两个枚举成员在定义时的顺序 |
ordinal() | 获取枚举成员的索引位置 |
调用
java
public class App {
public static void main(String[] args) {
// TODO Auto-generated method stub
Week w = Week.FRIDAY;
// 返回枚举值的常量索引
System.out.println(w.ordinal());
// 返回枚举中所有值
Week[] values = Week.values();
for(Week week : values) {
System.out.println(week);
}
switch(w) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
System.out.println("上班");
break;
case SATURDAY:
case SUNDAY:
System.out.println("休息");
break;
}
}
}
高级用法
枚举类中可以用自己的变量、方法和构造方法,构造方法只能使用 private 访问修饰符
java
public enum OrderStatus {
ORDER_NO_PAY(1, "未支付"),
ORDER_PAY_FINISH(2, "已支付"),
ORDER_CANCEL(3, "已取消"),
ORDER_FINISHNO_PAY(4, "已完成");
private int key;
private String desc;
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
private OrderStatus(int key, String desc) {
this.key = key;
this.desc = desc;
}
// 根据key值获取枚举值
public static OrderStatus getOrderType(int key){
for (OrderStatus value : OrderStatus.values()) {
if(key == value.getKey()) {
return value;
}
}
//根据自身的业务 查不到可以返回null,或者抛出异常。
return null;
}
}
java
public class App2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
OrderStatus orderCancel = OrderStatus.ORDER_NO_PAY;
// 常量索引为0
System.out.println(orderCancel.ordinal());
// 根据枚举中的key属性获取枚举值
OrderStatus orderType = OrderStatus.getOrderType(2);
System.out.println(orderType);
System.out.println(orderType.getDesc());
}
}