目录
定义
一个类有多个实例,但是实例的个数不是无穷的,是有限的。枚举类中的实例称为枚举项,一般来说,一个枚举类不应该有太多的枚举项。
使用
public enum Direction {
FRONT,BEHIND,LEFT,RIGHT;
}
public class Test{
public static void main(String[] args){
Direction a = Direction.LEFT;
// 创建一个枚举项,可以看作是new 对象
}
}
注意:定义枚举类的关键字是enum,而不是Enum 所有的关键字都是小写的。
其中,FRONT,BEHIND,LEFT,RIGHT都是枚举项,枚举项必须在最前面,他们都是本类的实例,也就说,本类只有四个对象
在定义枚举项时,多个枚举项使用逗号分割,最后一个枚举项使用分号结尾。
如果枚举类中只有枚举项,最后的分号可以省略不写(不建议)
枚举与switch
public class Test {
public static void main(String[] args) {
Direction a = Direction.LEFT;
switch (a) {
case BEHIND:
System.out.println("behind");
break;
case LEFT:
System.out.println("left");
break;
case RIGHT:
System.out.println("right");
break;
case FRONT:
System.out.println("front");
break;
}
}
}
注意:在switch中,不能使用枚举类的名称,因为编译器会根据switch中的a的类型去判断每个枚举类型,在case中必须直接给出与a相同类型的枚举项,而不能再有类型
所有枚举类都是Enum的子类
所有枚举类默认是Enum的子类,无需使用extends来继承,所以Enum中的方法,所有的枚举类都拥有
int compareTo() // 比较两个枚举项,其实比较的是序号,即:在枚举类中声明的顺序,例如:FRONT<BEHIND
boolean equals // 比较两个枚举项是否相等
int hashCode() // 返回枚举项的hashCode()
String name() // 返回枚举项的名称
int ordinal() // 返回枚举项在枚举类中的声明的序号,默认从0开始
String toString() // 把枚举项转化成字符串
static T valueOf(Class enumType,String name)// 把字符串转化成枚举项
枚举类的构造器
枚举类也可以有构造器,构造器默认都是private修饰,而且只能是private修饰,因为枚举类型的实例不能由外界来创建,实际上每个枚举项都是调用了一次无参构造方法
枚举类可以有成员
枚举类和正常类一样,都可以有实例变量、实例方法、静态方法等等 ,只不过它的实例个数是有限的。
如果枚举类只有一个有参的构造方法,那么在声明枚举项时需要传参
public enum Direction {
FRONT("前");
public String name;
Direction(String name){
this.name = name;
}
}
枚举类可以有抽象方法
创建每个枚举类时,使用“特殊”语法
- 只需要在方法上添加abstract关键字即可,不需要再enum前面添加abstract关键字
- 但是声明枚举项时需要使用匿名内部类
每个枚举类都有两个特殊的方法
这两个方法不用声明就可以调用,并且是static修饰的方法,不属于Enum类
values(); // 返回本类所有的枚举项
valueOf(String name) //通过枚举项的名字返回指定枚举项
标签:Direction,java,String,枚举,实例,public,name
From: https://www.cnblogs.com/ning23/p/18230583