1、枚举指由一组固定的常量组成合法的类型,就是一个一个列举出来。所以它一般都是表示一个有限的集合类型,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。
2、枚举的要求:
1)私有化类的构造器,保证不能在类的外部创建其对象。
2)在类的内部创建枚举类的实例,并用声明为 public static final 的变量来引用。
3)对象如果有实例变量,应该声明为private final,并在 构造器 中初始化。
3、枚举的特点:
1)枚举就是一种多例设计模式。所以首先要认识枚举,需要知道多例设计模式的特点: 构造方法 私有化,类内部需要提供若干个实例化对象,后面通过statica方法返回。
2)如果出现大量if else 也可以使用枚举来代替
4、枚举的用法:
enum Color { RED, GREEN, BLUE }
如果枚举不添加任何方法, 枚举值 默认为从0开始的有序数值。以 Color 枚举类型举例,它的枚举常量依次为 RED:0,GREEN:1,BLUE:2
枚举中添加新方法
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 获取name
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
5、枚举常用方法
values():以数组形式返回枚举类型的所有成员.
ordinal():获取枚举成员的索引位置,从0开始。
equals() :判断是否为同一个对象。
valueOf():将普通 字符串 转换为枚举实例。
6、枚举和常量的区别
1)枚举和常量不是一个维度的东西,枚举是对象,常量是字段。
2)常量能做的,枚举都能做,枚举能做的常量不一定能做。
3)switch语句支持枚举型,当switch使用int、 String 类型时,由于值的不稳定性会有越界的现象,对于这个的处理往往只能通过if条件筛选以及default模块来处理。而使用枚举型后,在编译期间限定类型,不允许发生越界的情况。
4)当你使用常量类时,往往得通过equals去判断两者是否相等,枚举有着严格的实例化控制,可以用 == 去做比较符。
5)常量类编译时,是直接把常量的值编译到类的 二进制 代码里,常量的值在升级中变化后,需要重新编译引用常量的类,因为里面存的是旧值。枚举类编译时,没有把常量值编译到代码里,即使常量的值发生变化,也不会影响引用常量的类。
6)枚举类编译后默认为final class,不允许继承可防止被子类修改。常量类可被继承修改、增加字段等,容易导致父类的不兼容。

不足之处请多多指教。