实例有限且固定的类,叫做枚举类。比如季节只有“春”、“夏”、“秋”、“冬”。
在早期,直接使用静态常量表示枚举:
public static final String SPRING="春";
public static final String SUMMER="夏";
在Java5.0之中新增了一个枚举类:
修饰符 enum 枚举类名{
.......
}
枚举类是一种特殊的类,和类、接口一个级别。在枚举类中可以有成员变量、方法、构造器,也可以实现一个或多个接口。
一个.java文件中,最多只能定义一个public(枚举)类。
非抽象的枚举类自动使用final修饰,不能派生子类。
枚举类的构造器只能使用private修饰。
必须在枚举类的第一行显示列出该枚举类的所有实例。这些实例默认使用public static final修饰,无需显示指定。
public enum SeasonEnum{
//此枚举类的所有实例,以逗号分隔。默认使用public static final修饰
SPRING,SUMMER,AUTUMN,WINTER;
}
public class Test{
public void test(SeasonEnum enum){
switch(enum){
case SPRING:
.......;
case SUMMER:
........;
case AUTUMN:
.......;
case WINTER:
........;
}
}
public void main(String[] args){
//枚举类.values() 获取该枚举类的所有实例,以数组形式返回。数据类型:枚举类[]
for(SeasonEnum s:SeasonEnum.values()){
//可通过 枚举类类名.实例名 访问枚举实例,值为该枚举实例变量的变量名
System.out.println(SeasonEnum.s); //输出SPRING、SUMMER、AUTUMN、WINTER
}
System.out.println(SeasonEnum.SPRING); //输出SPRING
}
}
public enum Gender{
//有构造器时,枚举实例必须调用相应的构造器来创建。实例名为MAIL,FEMAIL
MAIL("男"),FEMALE("女");
//枚举类的成员变量通常不可改变,建议使用private final修饰
private final String name; //这个成员变量是对枚举实例的说明
//枚举类的构造器默认(也只能)使用private修饰
private Gender(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
}
所有的枚举类都继承了Enum类,Enum常用的一个静态方法:
Gender g=Enum.valueOf(Gender.class,"MAIL"); //获取指定的枚举实例,第一个参数指定枚举类,第二个参数指定实例名(String类型)。g的值为MAIL。
也可以这样:
Gender g=Gender.valueOf("MAIL"); //用具体的枚举类,不用指定枚举类的类名
String str=g.getName(); //调用枚举实例的方法,"男"
g.setName("xxx");