枚举类用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
例如:
当需要定义一组常量时,强烈建议使用枚举类。
构造线程状态(创建、就绪、运行、阻塞、终止)枚举类。
//自定义枚举类
class State{
// 1.声明State对象的属性
private final String stateName;
private final String stateDescription;
// 2. 私有化的构造器
private State(String stateName, String stateDescription) {
this.stateName = stateName;
this.stateDescription = stateDescription;
}
// 3. 提供当前枚举类的多个对象
public static final State NEW = new State("创建","尚未启动的线程的线程状态");
public static final State WAITING = new State("就绪","等待线程的线程状态");
public static final State RUNNING = new State("运行","正在运行线程的线程状态");
public static final State BLOCK = new State("阻塞","线程阻塞等待监视器锁定的线程状态");
public static final State TERMINAL = new State("终止","终止线程的线程状态");
//4. 其他需求(如:toString()、获取对象属性等)
public String getStateName() {
return stateName;
}
public String getStateDescription() {
return stateDescription;
}
@Override
public String toString() {
return "State{" +
"stateName='" + stateName + '\'' +
", stateDescription='" + stateDescription + '\'' +
'}';
}
}
测试
public static void main(String[] args) {
State running = State.RUNNING;
System.out.println(running);
}
//enum关键字定义枚举类
enum State{
// 1. 提供当前枚举类的多个对象,对象之间用“,”隔开,结束用“;”。
NEW("创建","尚未启动的线程的线程状态"),
WAITING("就绪","等待线程的线程状态"),
RUNNING("运行","正在运行线程的线程状态"),
BLOCK("阻塞","线程阻塞等待监视器锁定的线程状态"),
TERMINAL("终止","终止线程的线程状态");
// 2.声明State对象的属性
private final String stateName;
private final String stateDescription;
// 3. 私有化的构造器
private State(String stateName, String stateDescription) {
this.stateName = stateName;
this.stateDescription = stateDescription;
}
//4. 其他需求(如:toString()、获取对象属性等)
public String getStateName() {
return stateName;
}
public String getStateDescription() {
return stateDescription;
}
@Override
public String toString() {
return "State{" +
"stateName='" + stateName + '\'' +
", stateDescription='" + stateDescription + '\'' +
'}';
}
}
测试
public static void main(String[] args) {
State running = State.RUNNING;
System.out.println(running);
System.out.println(State.class.getSuperclass()); //查看State枚举类的父类
}
注:使用enum关键字定义的枚举类默认继承于java.lang.Enum
java.lang.Enum
类是所有Java语言枚举类型的公共基类。
常用方法
得到当前枚举常量的名称。可以重写这个方法来使结果更易读。
public String toString() {
return name;
}
将一个字符串转为对应的枚举对象。要求字符串必须是枚举对象的“名字”。如果不是,抛出运行时异常。
public static <T extends Enum<T>> T valueOf(Class<T> enumType,
String name) {
T result = enumType.enumConstantDirectory().get(name);
if (result != null)
return result;
if (name == null)
throw new NullPointerException("Name is null");
throw new IllegalArgumentException(
"No enum constant " + enumType.getCanonicalName() + "." + name);
}
返回枚举类型的对象数组。该方法可以很方便地遍历所有枚举值。
public static void main(String[] args) {
State[] values = State.values();
for(State value:values){
System.out.println(value);
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43598687/article/details/122909598
内容来源于网络,如有侵权,请联系作者删除!