枚举的注意事项
1 定义枚举类要用关键字enum
2 所有枚举类都是Enum的子类
3 枚举类的第一行上必须是枚举项, 最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西, 这个分号就不能省略。 建议不要省略
4 枚举类可以有构造器, 但必须是private, 它默认的也是private
5 枚举类也可以有抽象方法,但是枚举项必须重写该方法
6 枚举在switch语句中的使用
public enum Direction {
FRONT,BEHIND,LEFT,RIGHT;
}
public enum Direction2 {
FRONT("前"), BEHIND("后"), LEFT("左"), RIGHT("右");
private String name;
Direction2(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public enum Direction3 {
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 Direction3(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void show();
}
public static void main(String[] args) {
Direction d = Direction.FRONT;
// FRONT
System.out.println(d);
//public String toString();返回枚举常量的名称,它包含在声明中
System.out.println("--------------");
Direction2 d2 = Direction2.FRONT;
// FRONT
System.out.println(d2);
// 前
System.out.println(d2.getName());
System.out.println("-------------------");
Direction3 d3 = Direction3.FRONT;
// FRONT
System.out.println(d3);
// 前
System.out.println(d3.getName());
// 前
d3.show();
System.out.println("=-=-----------------");
Direction3 dd = Direction3.LEFT;
switch (dd) {
case FRONT:
System.out.println("前");
break;
case BEHIND:
System.out.println("后");
break;
case LEFT:
System.out.println("左");
break;
case RIGHT:
System.out.println("右");
break;
}
}
=============================================================================================
public enum Direction2 {
FRONT("前"), BEHIND("后"), LEFT("左"), RIGHT("右");
private String name;
Direction2(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public static void main(String[] args) {
//public final int compareTo(E o)比较此枚举与指定对象的顺序。
Direction2 d21 = Direction2.FRONT;
Direction2 d22 = Direction2.BEHIND;
Direction2 d23 = Direction2.LEFT;
Direction2 d24 = Direction2.RIGHT;
// 0
System.out.println(d21.compareTo(d21));
// -3
System.out.println(d21.compareTo(d24));
// 3
System.out.println(d24.compareTo(d21));
System.out.println("--------------");
//public final String name()返回此枚举常量的名称,在其枚举声明中对其进行声明
// FRONT
System.out.println(d21.name());
// BEHIND
System.out.println(d22.name());
// LEFT
System.out.println(d23.name());
// RIGHT
System.out.println(d24.name());
System.out.println("-------------");
//public final int ordinal()返回枚举常量的序数
// 0
System.out.println(d21.ordinal());
// 1
System.out.println(d22.ordinal());
// 2
System.out.println(d23.ordinal());
// 3
System.out.println(d24.ordinal());
System.out.println("-------------------");
//public String toString()返回枚举常量的名称,它包含在声明中
//可以重写此方法
// FRONT
System.out.println(d21.toString());
// BEHIND
System.out.println(d22.toString());
// LEFT
System.out.println(d23.toString());
// RIGHT
System.out.println(d24.toString());
System.out.println("------------");
//public static <T extends Enum<T>> T valueOf(Class<T> enumType,
//String name)返回带指定名称的指定枚举类型的枚举常量
Direction2 dd = Enum.valueOf(Direction2.class, "FRONT");
// 前
System.out.println(dd.getName());
System.out.println("-------------");
//values()此方法虽然在JDK文档中查找不到,单每个枚举类都具有该方法
//它遍历枚举类的所有枚举值非常方便
Direction2[] direction2s = Direction2.values();
for (Direction2 d2 : direction2s) {
/*FRONT
前
BEHIND
后
LEFT
左
RIGHT
右*/
System.out.println(d2);
System.out.println(d2.getName());
}
}