定义:
枚举是指一组固定常量组成合法值的类型
首先是固定常量,一组有限常量集,比如一年的四个季节,太阳系的行星。其次,枚举是一种特殊的类型,定义了自己的一些规则,这些规则是建立在类规则之上的,是一种 type。
性质:
枚举是真正的 final,客户端不允许创建枚举类的实例,也不能对其进行拓展
Java 枚举本质上是 int 值。只能通过公有的静态 final 域为枚举类导出实例。
public enum Color {
GREEN,RED,BLUE,GRAY;
}
实际上枚举的完整的结构为:
public enum Color {
GREEN,RED,BLUE,GRAY;
Color() {
}
如果在 Color() 构造方法之前加上 private 则不会有任何问题。如果加上 public 等修饰符,IDE 会报错,也就是编译器不会通过。其实这是枚举与类的根本区别,就在于构造方法私有。
当然如果仅仅是构造方法私有,不再提供构造方法了,也就是说外界不能 new 实例,如果仅从这样看,那枚举就没有什么用了。
其实我们用过枚举的都知道,GREEN、RED 都是 Color 型的实例,其实枚举也可以看作自动处理了一些东西,帮助简化了代码,翻译成类大致就是:【与单例模式的饿汉式代码一样!!】
public class Color {
public static final Color GREEN = new Color(),
RED = new Color(),
BLUE = new Color(),
GRAY = new Color();
private Color() {
}
}
如果从这种角度去看,枚举的用法就不难理解了,也就是枚举类不给外界实例化的机会,只能它自己实例化,而一个枚举类的所有实例就只有枚举前面分号前的那几个,其他地方不允许创建。
原文:https://blog.csdn.net/lishuangling21/article/details/71398925