什么是枚举
Java 枚举是一个特殊的类,一般表示一组常量。
public enum Direction {
FRONT, BEHIND, LEFT, RIGHT;
}
Direction d = Direction.FRONT;
枚举类可以有什么
枚举跟普通类一样可以用自己的变量、方法和构造函数
构造函数
构造函数只能使用 private 访问修饰符,所以外部无法调用。
enum Direction {
FRONT, BEHIND, LEFT, RIGHT;//[在枚举常量后面必须添加分号,因为在枚举常量后面还有其他成员时,分号是必须的。枚举常量必须在枚举类中所有成员的上方声明。]
Direction()//[枚举类的构造器不可以添加访问修饰符,枚举类的构造器默认是private的。但你自己不能添加private来修饰构造器。] {
System.out.println("hello");
}
}
实例变量
enum Direction {
FRONT("front"), BEHIND("behind"), LEFT("left"), RIGHT("right");
//"front"就是传给构造器的参数name
private String name;
//Direction类的构造函数
Direction(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Direction d = Direction.FRONT;
System.out.println(d.getName());
抽象方法
每个枚举项都是一个匿名类的子类对象。
enum Direction {
FRONT() {
public void fun() {
System.out.println("FROND:重写了fun()方法");
}
},
BEHIND() {
public void fun() {
System.out.println("BEHIND:重写了fun()方法");
}
},
LEFT() {
public void fun() {
System.out.println("LEFT:重写了fun()方法");
}
},
RIGHT() {
public void fun() {
System.out.println("RIGHT:重写了fun()方法");
}
};
public abstract void fun()[只需要把fun()方法修改为抽象方法,但不可以把Direction类声明为抽象类。];
}
枚举类的默认方法
enum 定义的枚举类默认继承了 java.lang.Enum 类,(无需我们使用extends来继承。这说明Enum中的方法所有枚举类都拥有。)
并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口。
values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中。
values() 返回枚举类中所有的值。
ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
valueOf()方法返回指定字符串值的枚举常量。
enum Color
{
RED, GREEN, BLUE;
}
public class Test
{
public static void main(String[] args)
{
// 调用 values()
Color[] arr = Color.values();
// 迭代枚举
for (Color col : arr)
{
// 查看索引
System.out.println(col + " at index " + col.ordinal());
}
// 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException
System.out.println(Color.valueOf("RED"));
// System.out.println(Color.valueOf("WHITE"));
}
}