作用
有时候变量的值只在一个有限的范围内,例如服装的尺寸只有小、中、大和特大四种,用一般的变量和常量来保存这种数据有很多不方便的地方,容易出错。针对这种情况,就可以自定义枚举类,例如:
public enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE};
Size x = Size.LARGE;
语法
- 枚举类型的变量只能存储这个类的定义里面列举的一个值,或者null。
- 枚举类定义的时候列出了几个值,他就有几个实例,不能构造新对象。因此,在比较两个枚举类的变量时,直接用
==
。 可以为枚举类型添加构造器、方法和字段。当然构造器只有在定义的时候用。枚举类的构造器总是私有的,可以省略
private
修饰符。public enum Size {
// 下面是四个EnumSize实例,括号表示调用构造函数
// 四个实例的私有变量abbreviation的值分别是 "S", "M", "X", "XL"
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
private final String abbreviation;
/**
* 构造函数自动是私有的
* @param abbreviation 缩写
*/
Size(String abbreviation) {
this.abbreviation = abbreviation;
}
public String getAbbreviation() {
return abbreviation;
}
}
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()
,它返回所有枚举常量组成的数组。