java 28 - 5 JDK5的新特性 之 枚举的使用

时间:2023-03-09 16:20:36
java 28 - 5 JDK5的新特性 之 枚举的使用

上一章,自定义了枚举类,超级麻烦。。

所以,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
 void
finalize()

          枚举类不能有 finalize 方法。
 Class<E> getDeclaringClass()

          返回与此枚举常量的枚举类型相对应的 Class 对象。
 int hashCode()

          返回枚举常量的哈希码。
 String name()

          返回此枚举常量的名称,在其枚举声明中对其进行声明。
 int ordinal()

          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
 String toString()

          返回枚举常量的名称,它包含在声明中。
static
<T extends Enum<T>>

T
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;
} } }