枚举类的使用
类的对象只有有限个,确定的。比如星期:Monday、Tuesday、···· 、Sunday
当需要定义一组常量时,强烈建议使用枚举类
常用方法 values(),valueof(),toString()
import java.lang.Thread.State;
public class EnumTest3 {
public static void main(final String[] args) {
//values()返回枚举类型的对象数组
final Thread.State[] stateValues = Thread.State.values();
for (final State element : stateValues) {
System.out.println(element);
}
System.out.println("\n****************************************");
//valueOf()可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的"名字"
final Thread.State state1 = Thread.State.valueOf("RUNNABLE");
System.out.println(state1);
System.out.println("\n****************************************");
//toString()返回当前枚举类对象常量的名称
System.out.println(Thread.State.BLOCKED);
}
}
运行结果
NEW
RUNNABLE
BLOCKED
WAITING
TIMED_WAITING
TERMINATED
****************************************
RUNNABLE
****************************************
BLOCKED
自定义枚举类
public class EnumTest2 {
public static void main(final String[] args) {
System.out.println(Hero.CaoCao);
}
}
class Hero {
public static final Hero CaoCao = new Hero("曹操", "孟德");
public static final Hero LiuBei = new Hero("刘备", "玄德");
public static final Hero SunQuan = new Hero("孙权", "仲谋");
private final String name;
private final String desc;
private Hero(final String name, final String desc) {
this.name = name;
this.desc = desc;
}
@Override
public String toString() {
return this.name + ",字" + this.desc;
}
}
运行结果
曹操,字孟德
刘备,字玄德
孙权,字仲谋
enum关键字定义枚举类
public class EnumTest {
public static void main(final String[] args) {
System.out.println(Heros.CaoCao);
System.out.println(Heros.LiuBei);
System.out.println(Heros.SunQuan);
}
}
enum Heros {
CaoCao("曹操", "孟德"),
LiuBei("刘备", "玄德"),
SunQuan("孙权", "仲谋");
private final String name;
private final String desc;
private Heros(final String name, final String desc) {
this.name = name;
this.desc = desc;
}
@Override
public String toString() {
return this.name + ",字" + this.desc;
}
}
运行结果
曹操,字孟德
刘备,字玄德
孙权,字仲谋
如果不重写toString()方法,运行结果返回的是枚举对象常量的名称
CaoCao
LiuBei
SunQuan