枚举要点如下:
枚举限制一个变量只能赋予预先定义的一些值 枚举常量要大学,非强制但是符合代码规范 枚举可以声明为单独的类(outside a class),或者为类的一个成员(in class)。但是不能在一个方法中声明枚举。 枚举声明结束是否用分号是可选的 每个枚举都要一个静态(static)方法——values()。这个方法返回枚举值的数组(按值被声明的顺序) 枚举是一种特殊的类,所以可以添加进构造体,方法还有变量。看下面的例子,每个CoffeeSize类型实际上都是Coffieeize类的一个实例
enum CoffeeSize {
// 8, 10 & 16 传递给构造函数
BIG(8), HUGE(10), OVERWHELMING(16);
CoffeeSize(int ounces) { // 构造体
this.ounces = ounces;
}
private int ounces; // 实例变量
public int getOunces() {
return ounces;
}
}
枚举的构造体
永远不要直接调用枚举的构造体。枚举的构造体是自动调用的,输入参数就是你在定义枚举时提供的 你可以定义一个或多个输入参数给构造体,也可以重载枚举构造体,就像重载普通类的构造体一样 看下面的例子来说在枚举内加入方法是如何做到的。你可以在CoffeSize内定义getLidCode()方法并且返回“B”,然后在枚举常量中覆盖这个方法并且返回“A”
enum CoffeeSize {
BIG(8),
HUGE(10),
OVERWHELMING(16) { // 开始给这个枚举常量定义一个“body”
public String getLidCode() { // 覆盖CoffeSize中定义的方法
return "A";
}
}; // 如果后面还有代码,这个分号还是需要的
CoffeeSize(int ounces) {
this.ounces = ounces;
}
private int ounces;
public int getOunces() {
return ounces;
}
public String getLidCode() { // 被枚举常量OVERWHELMING覆盖了
return "B";
}
}