上一章,自定义了枚举类,超级麻烦。。
所以,JAVA给了一个枚举类:类 Enum<E extends Enum<E>>
注意事项
- 定义枚举类要用关键字enum
- 所有枚举类都是Enum的子类
- 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
- 枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
- 枚举类也可以有抽象方法,但是枚举项必须重写该方法
- 枚举在switch语句中的使用
enum的方法:
除了下面的方法,还有一个方法在API中找不到的:
values(); : 每个枚举类都具有这个方法,遍历枚举类的所有美剧值。
1 // values() 2 // 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便 3 Direction2[] dirs = Direction2.values(); 4 for (Direction2 d2 : dirs) { 5 System.out.println(d2); 6 System.out.println(d2.getName()); 7 }
方法摘要 | ||
---|---|---|
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; }
第二版:
1 public enum Direction02 { 2 3 FRONT("前"), BENIND("后"), LEFT("左"), RIGHT("右"); 4 5 private String name; 6 7 private Direction02(String name) { 8 this.name = name; 9 } 10 11 public String getname() { 12 return name; 13 } 14 }
第三版:
1 public enum Direction03 { 2 FRONT("前") { 3 @Override 4 public void show() { 5 System.out.println("前"); 6 7 } 8 }, 9 BEHIND("后") { 10 @Override 11 public void show() { 12 System.out.println("后"); 13 14 } 15 }, 16 LEFT("左") { 17 @Override 18 public void show() { 19 System.out.println("左"); 20 21 } 22 }, 23 RIGHT("右") { 24 @Override 25 public void show() { 26 System.out.println("右"); 27 28 } 29 }, ; 30 private String name; 31 32 private Direction03(String name) { 33 this.name = name; 34 } 35 36 public String getname(String name) { 37 return name; 38 } 39 40 public abstract void show(); 41 }
测试类:
1 public class DirectionDemo { 2 3 public static void main(String[] args) { 4 5 // 打印第一版本 6 Direction01 d1 = Direction01.FRONT; 7 System.out.println(d1); // FRONT 8 9 // 打印第二版本 10 Direction02 d2 = Direction02.FRONT; 11 System.out.println(d2); // FRONT 12 System.out.println(d2.getname()); // 前 13 14 // 打印第三版本 (枚举在switch语句中的使用) 15 Direction03 d3 = Direction03.FRONT; 16 17 switch (d3) { 18 case FRONT: 19 System.out.println("选择了前"); 20 break; 21 22 case BEHIND: 23 System.out.println("选择了后"); 24 break; 25 26 case LEFT: 27 System.out.println("选择了左"); 28 break; 29 30 case RIGHT: 31 System.out.println("选择了右"); 32 break; 33 34 default: 35 break; 36 } 37 38 } 39 40 }
时间: 2024-10-19 09:36:29