作用

有时候变量的值只在一个有限的范围内,例如服装的尺寸只有小、中、大和特大四种,用一般的变量和常量来保存这种数据有很多不方便的地方,容易出错。针对这种情况,就可以自定义枚举类,例如:

  1. public enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE};
  2. Size x = Size.LARGE;

语法

  • 枚举类型的变量只能存储这个类的定义里面列举的一个值,或者null。
  • 枚举类定义的时候列出了几个值,他就有几个实例,不能构造新对象。因此,在比较两个枚举类的变量时,直接用 ==
  • 可以为枚举类型添加构造器、方法和字段。当然构造器只有在定义的时候用。枚举类的构造器总是私有的,可以省略 private 修饰符。

    1. public enum Size {
    2. // 下面是四个EnumSize实例,括号表示调用构造函数
    3. // 四个实例的私有变量abbreviation的值分别是 "S", "M", "X", "XL"
    4. SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
    5. private final String abbreviation;
    6. /**
    7. * 构造函数自动是私有的
    8. * @param abbreviation 缩写
    9. */
    10. Size(String abbreviation) {
    11. this.abbreviation = abbreviation;
    12. }
    13. public String getAbbreviation() {
    14. return abbreviation;
    15. }
    16. }

java.lang.Enum

所有的枚举类都自动是抽象类 Enum<E> 类的子类,例如 Size 类就继承了 Enum<Size>

实例方法:

  • String toString() | String name() 返回枚举常量的标识符的字符串值。
  • int ordinal() 返回枚举常量的序数,从0开始。
  • int compareTo(E other) 根据序数来比较枚举常量,左边的序数减右边的序数就是返回值。
  • Class getDeclaringClass() 这个方法返回的值可能会跟 getClass() 不一样,以这个为准。

类方法:

  • static > T valueOf(Class enumClass, String name)

返回指定的枚举类中,具有指定的名字的枚举常量。

  • 此外,每个自定义的枚举类,都有一个类方法 values(),它返回所有枚举常量组成的数组。