枚举是JDK1.5引入了的新类型,其实质依旧是一个类,而每个被枚举的成员实质就是一个枚举类型的实例。枚举规范了参数的形式,这样我们就可以不用考虑类型的不匹配以及int型参数可能带来的模糊概念。接下来的杭州Java基础学习课中,就给大家简单梳理一下枚举相关知识点。

枚举类是一种特殊的类,它的对象是有限而且固定的。 注意,定义枚举类的关键字是enum,而不是Enum,所有关键字都是小写的! 其中FRONT、BEHIND、LEFT、RIGHT都是枚举项,它们都是本类的实例,本类一共就只有四个实例对象。 创建枚举项就等同于调用本类的无参构造器,所以FRONT、BEHIND、LEFT、RIGHT四个枚举项等同于调用了四次无参构造器,所以你会看到四个hello输出。

在定义枚举项时,多个枚举项之间使用逗号分隔,最后一个枚举项后需要给出分号。但如果枚举类中只有枚举项(没有构造器、方法、实例变量),那么可以省略分号,但一般不建议这么做。 switch表达式可以是任何枚举类型,case表达式可以直接使用枚举值名字。在switch中,不能使用枚举类名称,例如:“case Direction.FRONT:”这是错误的,因为编译器会根据switch中d的类型来判定每个枚举类型,在case中必须直接给出与d相同类型的枚举选项,而不能再有类型。

不能使用new来创建枚举类的对象,因为枚举类中的实例就是类中的枚举项,所以在类外只能使用类名.枚举项。

枚举类使用注意事项 1、枚举类可以实现一个或多个接口,不能显式的继承其他父类。 因为使用 enum 定义的枚举类默认继承了java.lang.Enum类,java.lang.Enum实现了Comparable, Serializable 两个接口。 2、使用enum定义、非抽象的枚举类默认使用final修饰符,因此枚举类不能派生子类。 3、枚举类的构造器只能用private访问控制符, 默认为private。 4、枚举类的所有实例必须在枚举类第一行显式列出,否则这个枚举类不能产生实例,这些实例系统自动加上public static final修饰。 5、一个Java源文件最多只能定义一个public访问权限的枚举类,且源文件名称和枚举类名相同。 6、枚举类默认提供一个values()方法,方便遍历所有的枚举值。 7、枚举类定义抽象方法时,不能使用abstract关键字将枚举类定义成抽象类, 因为系统会自动加上abstract。因为枚举类需要显式的创建枚举值,而不是父类,所以每个枚举值必须为抽象方法提供实现。