⛳ 枚举
-
类的对象只有有限个,确定的。 使用场景:
-
- 星期: Monday(星期一)、 …、 Sunday(星期天)
- 性别: Man(男)、 Woman(女)
- 季节: Spring(春节)…Winter(冬天)
- 支付方式: Cash(现金)、 WeChatPay(微信)、 Alipay(支付宝)、 BankCard(银行卡)、 CreditCard(信用卡)
- 就职状态: Busy、 Free、 Vocation、 Dimission
- 订单状态: Nonpayment(未付款)、 Paid(已付款) 、 Delivered(已发货)、Return(退货)、 Checked(已确认) Fulfilled(已配货)、
- 线程状态:创建、就绪、运行、阻塞、死亡
-
当需要定义一组常量时,强烈建议使用枚举类 使用说明:
-
- 使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再继承其他类
- 枚举类的构造器只能使用 private 权限修饰符
- 枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的实例系统会自动添加 public static final 修饰
- 必须在枚举类的第一行声明枚举类对象
-
Enum类的主要方法:
-
- values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
- valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
- toString():返回当前枚举类对象常量的名称
🎨 例子:使用常量表示线程状态
public class StateDem1 {
public static void main(String[] args) {
System.out.println(State.WAITING);
}
static class State {
public static final String NEW = "NEW";
public static final String RUNNABLE = "RUNNABLE";
public static final String BLOCKED = "BLOCKED";
public static final String WAITING = "WAITING";
public static final String TIMED_WAITING = "TIMED_WAITING";
public static final String TERMINATED = "TERMINATED";
// public static final String TERMINATED2 = "TERMINATED2";
}
}
🏭 例子:使用枚举表示线程状态
public class StateDem2 {
int i;
static int i1;
public static void main(String[] args) {
//获取一个枚举对象
System.out.println(State.WAITING);
System.out.println(State.valueOf("BLOCKED"));
//循环枚举
State[] states = State.values();
for (int i = 0; i < states.length; i++) {
System.out.println(states[i]);
}
}
enum State {
//一个类State,中有6个这个类的静态对象
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
}
📢 例子:订单状态的枚举
package org.example.$_enum;
import org.junit.Test;
/**
* 订单状态: Nonpayment(未付款)、 Paid(已付款) 、 Delivered(已发货)、Return(退货)、 Checked(已确认) Fulfilled(已配货)、
*/
public class StateEnum {
@Test
public void test01(){
OrderState[] values = OrderState.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i] + "-" + values[i].getValue() + "-" + values[i].getCode());
}
}
public enum OrderState {
//static final OrderState NON_PAYMENT = new OrderState(1, "未付款")
NON_PAYMENT(1, "未付款"),
PAID(2, "已付款"),
DELIVERED(3, "已发货"),
RETURN(4, "退货"),
CHECKED(5, "已确认"),
FULFILLED(6, "已配货");
private OrderState(int code, String value) {
this.code = code;
this.value = value;
}
private int code;
private String value;
public String getValue() {
return value;
}
public int getCode() {
return code;
}
}
}
结果:
NON_PAYMENT-未付款-1
PAID-已付款-2
DELIVERED-已发货-3
RETURN-退货-4
CHECKED-已确认-5
FULFILLED-已配货-6