Java枚举是类类型,不过创建枚举类型不是使用关键字class而是enum。
枚举类型有构造函数,建立每个枚举常量时都要调用该构造函数。
不能使用new实例化一个枚举。
枚举声明不能加final或abstract。
如果枚举不是嵌套在一个class内部,那么枚举的作用域有public和默认两种。如果枚举嵌套在一个class内部,那么枚举的作用域有public、protected、private和默认四种。这一点和class一样。
枚举不能嵌套在枚举内部。
枚举不能是超类,也就是说枚举不能被继承。
枚举不能继承另一个类(但枚举会自动继承一个类java.lang.Enum)。java.lang.Enum是一个抽象类,不是枚举。
所有枚举类型自动包括两个预定义方法:
public static enum-type[] values()
返回包含一列枚举常量的数组。
public static enum-type valueOf(String str)
返回其值与所传递的str中的字符串相对应的枚举常量。
注意,java.lang.Enum并没有这两个方法。
枚举最简单的形式就是一个命名常量的列表,这些常量称之为枚举常量。
枚举常量隐身声明为枚举的公有、静态成员,且类型就是声明的枚举类型。这些常量被称为“自类型化的”,“自”在此指一个封闭枚举。
每一个枚举常量是它的枚举类型的一个对象。
对枚举类型定义的任何实例变量,每一枚举常量都具有一个它们自己的副本。(可以以类和对象的关系来理解)
枚举常量的声明要放在枚举类型体的最前面。
枚举常量名称不能重复。
两个枚举常量可使用关系运算符“==”来表示经过比较二者相等。(可以以两个普通类对象的比较来理解。)
输出枚举常量将会调用枚举类型的toString()方法,默认情况下,会输出枚举常量的名称。但如果覆盖了toString()方法,将输出toString()返回的字符串。(可以对象的toString()来理解)
枚举值可以用来控制switch语句,此时所有case语句必须使用来自switch表达式所使用的同一个枚举类型的常量。不允许使用枚举类型名来限定case语句中的常量,就是说,如果MALE是枚举类型Gender的枚举常量,那么在case语句中只能写MALE,而不能写Gender.MALE。