1. 枚举类与普通类一样,一个java文件中只能定义一个public的枚举类,且此枚举类名必须和java文件名同名。枚举类默认继承java.lang.Enum类,而不是Object类。Enum类实现了Serializable接口和Comparable接口。
2. 枚举类的构造器只能使用private访问控制符。如不指定,则默认是private的。
3. 枚举类的实例必须在枚举类中显示指出,因为枚举类在此之后不可能产生任何实例。列举这些实例时,系统默认追加public static final控制符。
4. 所有枚举类提供了一个values()方法,方便列举所有枚举值。
public class Temp { public static void main(String[] args) { new Temp().judge(SeasonEnum.SPRING); //通过EnumClass.variable的方式调用枚举值 for(SeasonEnum es : SeasonEnum.values()) { //通过EnumClass.values()方法返回所有枚举值 System.out.println(es); } } public void judge (SeasonEnum se) { switch (se) { //JDK1.5后,java添加了switch支持Enum的功能 case SPRING: System.out.println("春天"); break; case SUMMER: System.out.println("夏天"); break; case FALL: System.out.println("秋天"); break; case WINTER: System.out.println("冬天"); break; } } } enum SeasonEnum { //定义一个枚举类,包含四个值 SPRING,SUMMER,FALL,WINTER; }
5. 枚举类的属性,方法和构造器。
如下段代码,如果枚举类Gender拥有一个成员属性name,则为其赋值的方法可以写成:
public class Temp { public static void main(String[] args) { Gender g = Gender.valueOf(Gender.class, "MALE"); //通过valueOf()方法创建枚举对象 g.setName("女"); //输出:参数错误。 } } enum Gender { MALE,FEMALE; private String name; public void setName (String name) { switch (this) { case MALE: if ("男".equals(name)) this.name = name; else { System.out.println("参数错误"); return; } break; case FEMALE: if ("女".equals(name)) this.name = name; else { System.out.println("参数错误"); return; } break; } } }为了避免上端代码出现的参数错误,我们应当将name设置成private final的,并使用构造器赋值:
public class Temp { public static void main(String[] args) { Gender g = Gender.valueOf(Gender.class, "FEMALE"); //通过valueOf()方法创建枚举对象 System.out.println(g.getName()); //输出:女 System.out.println(g.toString()); //输出:FEMALE } } enum Gender { MALE("男"),FEMALE("女"); //通过调用相应的构造器赋值 private final String name; private Gender (String name) { this.name = name; } public String getName() { return this.name; } }