上一章,自定义了枚举类,超级麻烦。。
所以,JAVA给了一个枚举类:类 Enum<E extends Enum<E>>
注意事项
- 定义枚举类要用关键字enum
- 所有枚举类都是Enum的子类
- 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
- 枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
- 枚举类也可以有抽象方法,但是枚举项必须重写该方法
- 枚举在switch语句中的使用
enum的方法:
除了下面的方法,还有一个方法在API中找不到的:
values(); : 每个枚举类都具有这个方法,遍历枚举类的所有美剧值。
// values()
// 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便
Direction2[] dirs = Direction2.values();
for (Direction2 d2 : dirs) {
System.out.println(d2);
System.out.println(d2.getName());
}
方法摘要 | ||
---|---|---|
protected Object |
clone() 抛出 CloneNotSupportedException。 |
|
int |
compareTo(E o) 比较此枚举与指定对象的顺序。 |
|
boolean |
equals(Object other) 当指定对象等于此枚举常量时,返回 true。 |
|
protected |
finalize() 枚举类不能有 finalize 方法。 |
|
Class<E> |
getDeclaringClass() 返回与此枚举常量的枚举类型相对应的 Class 对象。 |
|
int |
hashCode() 返回枚举常量的哈希码。 |
|
String |
name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。 |
|
int |
ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 |
|
String |
toString() 返回枚举常量的名称,它包含在声明中。 |
|
static
|
valueOf(Class<T> enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。 |
第一版:
public enum Direction01 {
FRONT, BENIND, LEFT, RIGHT;
}
第二版:
public enum Direction02 { FRONT("前"), BENIND("后"), LEFT("左"), RIGHT("右"); private String name; private Direction02(String name) {
this.name = name;
} public String getname() {
return name;
}
}
第三版:
public enum Direction03 {
FRONT("前") {
@Override
public void show() {
System.out.println("前"); }
},
BEHIND("后") {
@Override
public void show() {
System.out.println("后"); }
},
LEFT("左") {
@Override
public void show() {
System.out.println("左"); }
},
RIGHT("右") {
@Override
public void show() {
System.out.println("右"); }
}, ;
private String name; private Direction03(String name) {
this.name = name;
} public String getname(String name) {
return name;
} public abstract void show();
}
测试类:
public class DirectionDemo { public static void main(String[] args) { // 打印第一版本
Direction01 d1 = Direction01.FRONT;
System.out.println(d1); // FRONT // 打印第二版本
Direction02 d2 = Direction02.FRONT;
System.out.println(d2); // FRONT
System.out.println(d2.getname()); // 前 // 打印第三版本 (枚举在switch语句中的使用)
Direction03 d3 = Direction03.FRONT; switch (d3) {
case FRONT:
System.out.println("选择了前");
break; case BEHIND:
System.out.println("选择了后");
break; case LEFT:
System.out.println("选择了左");
break; case RIGHT:
System.out.println("选择了右");
break; default:
break;
} } }