J2SE 1.5新增了enum关键字用来声明枚举类型。
enum与class具有很多相似的地方:
-
相似的访问控制,可以实现一个或多个接口,一个java源文件内只能有一个public枚举且其名字要与源文件名相同。
-
用enum声明的枚举类也可以有
但enum与class也有一些不同之处:
-
使用enum声明的枚举类默认继承于java.lang.Enum类,而不是java.lang.Object,它实现了Serializable和Comparable接口。
-
枚举类的构造器只能是private的,如果忽略了访问控制符,编译器默认使用private修饰。因此,枚举类无法通过new关键字来创建对象,而只能使用 EnumName.InstanceName 的形式来得到
-
枚举类的所有实例必须在枚举类中显示列出,这些实例编译器会自动添加public static final来修饰,无需手动添加。如果实例形如 XXX ,则内部先调用父类Enum的构造器,再调用默认的无参构造器。如果形如 XXX("xxx"),则调用父类构造后再调用private构造器。
-
enum可用在switch case 语句中,且case里面的常量不需要使用 EnumName.InstanceName 这种形式,可以直接写InstanceName。
Enum类有一个valueOf静态方法,用来返回带指定名称的指定枚举类型的枚举常量,它的name参数是枚举某个实例的名字,如下例中,如果有 SeasonEnum season = Enum.valueOf(SeasonEnum.class,"spring"),则season为null,应该用"SPRING" 。Enum还提供了一个values方法,用以遍历所有的枚举值。
例子:
public enum SeasonEnum{
SPRING("spring"),SUMMER("summer"),AUTUMN("autumn"),WINTER("winter");//use private constuctor
private String name;
private SeasonEnum(String name){
this.name=name;
}
public String toString(){
return this.name;
}
}
阅读(376) | 评论(0) | 转发(0) |