2016-11-5

Java 什么是枚举?

枚举可以看作是一种特殊的类,它继承自 java.lang.Enum 类,因此不能继承其他类,但可以实现接口。

enum关键字和class关键字的约束行为不同 class 定义的类, 通过new操作创建对象, 想new几个就几个 而 enum 关键字定义的类, 其实例对象, 只能在这个enum类中定义好, 它的实例是有限的, 限制了的范围;

枚举(Enum)是 Java 中的一种特殊的数据类型,它允许一个变量只能取预定义的一组常量值

如果我们不自定义枚举类的成员变量和构造方法, 只定义枚举实例, 则枚举实例内容都将以字符串的形式存在, 在类加载的时候会通过 protected Enum(String name, int ordinal) 构造函数被创建为基本的Enum实例;  

in short 大约等于一个在static块初始化, 固定实例值的 class

enum TokenType {
	AND(10),
    OR(10),
    REMOVE(10),
    CONDITION(10),
    OPEN_PARENTHESIS(10),
    CLOSE_PARENTHESIS(10),
    SOF(100),
    EOF(100),
    ERROR(10);
    
	private final int priority;
	private TokenType(int priority) {
		this.priority = priority;
	}
	public int getPriority() {
		return priority;
	}
}

枚举不仅可以包含简单的常量,还可以包含字段、构造器和方法。例如,我们可以为每个添加一个中文名称:

public enum Day {
    MONDAY("星期一"),
    TUESDAY("星期二"),
    WEDNESDAY("星期三"),
    THURSDAY("星期四"),
    FRIDAY("星期五"),
    SATURDAY("星期六"),
    SUNDAY("星期日");
 
    private final String chineseName;
 
    Day(String chineseName) {
        this.chineseName = chineseName;
    }
 
    public String getChineseName() {
        return chineseName;
    }
}
 
public class EnumAdvancedExample {
    public static void main(String[] args) {
        Day today = Day.MONDAY;
        System.out.println("Today is: " + today.getChineseName());
    }
}