定义一个简单的枚举类
首先我们看如何定义一个简单的枚举类,利用关键字enum修饰后该枚举类默认继承了java.lang.enum类。此时它不可以继承其它类但可以实现接口。
package Enum;
public enum SimpleColor {
RED,BLUE,YELLOW;
}
每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。上述代码等价于:
class SimpleColor
{
public static final Color RED = new Color();
public static final Color BLUE = new Color();
public static final Color Yellow = new Color();
// 私有的构造方法
private Color(){}
}
自定义复杂枚举类
static、final关键字保证枚举类随着类的加载实例化且不可变。枚举类中允许定义属性,构造方法(只能是私有),普通方法和抽象方法。具体如下代码:
package Enum;
public enum Color {
RED("red"){
@Override
public void showColor() {
System.out.println("我的颜色是红色");
}
},
BLUE(){
@Override
public void showColor() {
System.out.println("我的颜色是蓝色");
}
};
// 枚举类的属性
private String color;
// 枚举类的私有构造方法
private Color(String color){this.color = color;}
private Color(){}
// 枚举类中的普通方法
public String getColor(){
return this.color;
}
// 枚举类中的抽象方法,需要在每一个枚举实例中实现
public abstract void showColor();
}
操作枚举类
package Enum;
public class ColorTest {
public static void main(String[] args) {
// 获取指定的枚举实例
Color red = Color.RED;
// 通过名称获取枚举实例
Color blue = Color.valueOf("BLUE");
// 遍历枚举类中所有的对象
for (Color color : Color.values()) {
// 获取该对象在枚举类种中的索引(已经定义好的方法)
color.ordinal();
// 调用自定义方法
System.out.println(color.getColor());
color.showColor();
}
// 枚举类中的枚举可以在Switch语句中直接使用
switch(blue){
case RED:
System.out.println("我是红色");
break;
case BLUE:
System.out.println("我是蓝色");
break;
}
}
}
枚举理解
枚举类中的每个枚举对象都被static final 关键字修饰且构造方法私有。我们可以用枚举类存储常量或者使用它实现单例模式。