枚举:特殊类型
枚举类写法:
注意:
枚举类的第一行,只能写一些合法的标识符(名称),多个名称用逗号分隔开。
这些名称,本质是常量,每个常量都会记住枚举类的一个对象。
枚举类的特点:
编译前:
反编译后:
枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象。
枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类对外不能创建对象。
枚举类都是最终类,不可以被继承。
枚举类中,从第二行开始,可以定义类的其他各种成员。
编译器为枚举类新增了几个方法,并且枚举类都是继承:java,lang.Enum类的,从enum类也会继承到一些方法。
若枚举只有一个对象, 则可以作为一种单例模式的实现方式。
枚举类的实现:
在JDK5.0 之前,需要程序员自定义枚举类型。
-
私有化
类的构造器,保证不能在类的外部创建其对象 -
在类的内部创建枚举类的实例。声明为:
public static final
,对外暴露这些常量对象 -
对象如果有
实例变量
,应该声明为private final
(建议,不是必须),并在构造器中初始化
在JDK5.0 之后,Java支持enum
关键字来快速定义枚举类型。
【修饰符】 enum 枚举类名{
常量对象列表
}
【修饰符】 enum 枚举类名{
常量对象列表;
对象的实例变量列表;
}
enum中常用方法
String toString(): 默认返回的是常量名(对象名),可以继续手动重写该方法!
static 枚举类型[] values():返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值,是一个静态方法
static 枚举类型 valueOf(String name):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
String name():得到当前枚举常量的名称。建议优先使用toString()。
int ordinal():返回当前枚举常量的次序号,默认从0开始