1.什么是枚举类.
枚举类型就是多例:一个类有多个实例,但是实例的个数不是无穷的,是有限的,枚举类中的实例称为枚举项,一般一个枚举类不应该有太多枚举项。
2.定义枚举类
使用enum关键字,例如:
public enum Direction{
FRONT,BEHIND,LEFT,RIGHT;
}
注意:定义枚举类的关键字是enum,而不是Enum(这是Java中的一个类,所有枚举类,都是该类的子类),所有java关键字都是小写,其中FRONT,BEHIND,LEFT,RIGHT,都是本类的对象实例,也就是说本类只有四个对象,在定义枚举项时,以逗号隔开,最后一个枚举项以分号结尾,如果枚举类型中只有枚举项(没有构造器,方法变量)可以省略“ ;",但是建议不要省略,构造方法只能是private类型
3.枚举与swich
Direction d = Direction.FRONT;
switch (d) {
case BEHIND:
System.out.println("后");
break;
case FRONT:
System.out.println("前");
break;
case LEFT:
System.out.println("左");
break;
case RIGHT:
System.out.println("右");
break;
default: break;
}
注意:在switch中,不能是有枚举类名(这里是Direction),因为编译器会根据switch中d的类型来判断,每个枚举类型,在case中必须必须直接给出和d相同类型的枚举项,而不能再有类型
4.所有枚举类都是Enum的子类
所有枚举类都默认是Enum的子类,无需是由extends来继承,这说明Enum中的方法所有枚举类都拥有 int compareTo(),比较两个枚举项谁大谁小,其实就是比较枚举项在枚举类中声明的顺序,例如FRONT下标是0,BEHIND下标是1.。
枚举类常用的函数
boolean equals() | 比较两个枚举项是否相等 |
int hashCode() | 返回枚举项的hashCode |
String name() | 返回枚举项的名称 |
int ordinal() | 返回枚举项在枚举类中声明的序号,第一个枚举项的序号是0 |
String toString() | 把枚举项转换成字符串 |
static T valueOf(Class enumType,String name) | 把字符串转换成枚举项 |
5.枚举类的构造器
- 枚举类也可以有构造器,构造器默认都是private修饰,而且只能是private修饰,因为枚举类型的实力不能让外界来创建;
- 其实创建枚举项就等于调用本类的无参构造器;
6.枚举类可以有成员
其实枚举类和正常类一样,都可以有实例变量,实例方法,静态方法等等,只不过他的实例个数是有限的,如果Direction类只有唯一的构造器,并且是有参的构造器,那么在创建枚举项时,必须对枚举项赋值。
7.枚举类中也可以有抽象方法
- 枚举类中也可以有抽象方法,创建每个枚举项时,使用“特殊”的语法重写抽象方法
- 只需在方法上添加abstract关键字即可,不可以将类名声明称抽象类。
- 特殊方法(匿名内部类),也就是说每个枚举对象,都是匿名内部类子类的对象
public enum Direction {
FRONT("前"){
publie void fun(){
System.out.print1n("sdfd");
}
}
},BEHIND("后"){
publie void fun(){
System.out.print1n("sdfd");
}
}
},LEFT("左"){
publie void fun(){
System.out.print1n("sdfd");
}
}
};
public abstract void fun();
8.每个枚举类都有两个特殊方法
每个枚举类都有两个不需声明的的特殊static方法,这两个方法,不是父类中的方法,
values()返回本类所有枚举项
valuesOf()通过枚举项的名字返回指定枚举项,注意,这个方法跟Enum类中的valuesOf()的方法参数不同