java枚举类型enum
枚举类型是java 5新增特性的一部分,是一种特殊的数据类型(既是一种类类型但是又比类类型多些特殊的约束)
枚举定义的方式:
public enum Day{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
定义枚举类型使用的关键字是enum,与class类似。一般枚举类型的值都是大写的字母,多个值之间以逗号分隔。
枚举类型可以单独的定义,也可以定义在其他类内部。
使用方式:
最简单的就是枚举值的直接引用
public static void main(String[] args){
Day day = day.MONDAY;
}
实现原理
在使用enum关键字创建枚举类型并编译后,编译器会生成一个相关的类,这个类继承了java API中的java.lang.Enum类。
也就是说实际enum枚举类型是一个继承java.lang.Enum的类。枚举类型中的枚举值,编译后其实都枚举类型的对象,在静态块中初始化。
Enum抽象类的常见方法
int compareTo(E o) 比较此枚举与指定对象的顺序,返回该枚举序号减去指定枚举序号
boolean equals(Object o) 当指定对象等于此枚举常量时,返回true
Class<?> getDeclaringClass() 返回与此枚举常量的枚举类型相对应的Class
String name() 返回此枚举常量名称
int ordinal() 返回枚举常量的序数(初始为0)
String toString() 返回枚举常量的名称
static<T extends Enum
枚举类型继承Enum,编译后生成values(),values()方法的作用就是获取枚举类中的所有变量,并作为数组返回
valueOf(String name) 与Enum类中的方法类似,获取对应的枚举对象
枚举类型的进阶使用
枚举类型本质上来说就是一个类,也可以跟普通类一样,定义构造方法、成员变量、普通方法,也可以重写Enum的方法。
此外,还可以定义抽象方法,使具体枚举值实现抽象方法,以便产生不同行为。
public enum EnumDemo{
FIRST{
public String getInfo(){
return "FIRST TIME";
}
},
SECOND{
public String getInfo(){
return "SECOND TIME";
}
}
//定义抽象方法
public abstract String getInfo();
}
由于单继承的原因,enum类不能再继承其他类,但不妨碍它实现接口,因此enum类同样可以实现多接口。
interface food{
void eat();
}
interface sport{
void run();
}
public enum EnumDemo2 implements food,sport{
FOOD,
SPORT,
; //这里有分隔符
@Override
public void eat(){
System.out.println("eat.....");
}
@Override
public void run() {
System.out.println("run.....");
}
}
枚举与switch
switch对枚举类型也进行了支持
enum Color {GREEN,RED,BLUE}
public class EnumDemo4 {
public static void printName(Color color){
switch (color){
case BLUE: //无需使用Color进行引用
System.out.println("蓝色");
break;
case RED:
System.out.println("红色");
break;
case GREEN:
System.out.println("绿色");
break;
}
}
public static void main(String[] args){
printName(Color.BLUE);
printName(Color.RED);
printName(Color.GREEN);
}
}