一、枚举类:
在某些情况下,一个类的对象是有限而且固定的。
例如季节类,只能有春夏秋冬四个对象,那么季节
类就称为枚举类。
在jdk1.5之前需要我们手动实现枚举类:
1.构造器使用private修饰
2.属性使用private final修饰(私有常量)
3.枚举类的所有实例都使用public static final修饰:
(全局常量的形式存在)
二、
在jdk1.5开始新增了enum关键字来定义枚举类:
1.使用关键字enum定义类,不再是class关键字;
但是还是类结构,就是一个特殊的类。
2.使用关键字enum定义的枚举类默认继承了java.lang.Enum类,
而不是Obejct类;因此枚举类不能再显示的继承其他父7类(
枚举类不能在有其他的继承关系);
枚举类默认继承的java.lang.Enum类实现了Serializable和
Comparator接口。
3.非抽象的枚举类默认是final的,所以枚举类不能派生子类。
4.枚举类的构造器只能使用private修饰,即使定义构造器时省略
修饰符也默认是private。
5.枚举类的所有实例必须在枚举类的第一行显示的列出,且是以,
分隔;结束,这些枚举类的实例也被称为枚举值;如果不在枚举
类中列出枚举类的实例,那么该枚举类就不存在任何实例(因为
其构造器是private的);且在枚举类中列出的实例系统会自动添
加public static final修饰符,所以无需显示添加。
三、
6.所有的枚举类都提供了一个values()方法,该方法可以很方便的
遍历出所有的枚举值(枚举类的实例)。
四、
在jdk1.5中还可以在switch语句中使用枚举类对象作为表达式,case
子句可以直接使用枚举值的名字,无需添加枚举类作为限定:
五、
若枚举类只有一个枚举值,则可以作为一种单例模式的实现方式:
枚举类的属性总结:
1.枚举类对象的属性值不允许被修改,所以必须定义为private final
2.枚举类中使用private final修饰的属性一般在new其构造器创建
对象时在构造器中为其初始化值。
3.若枚举类显示的定义了带参的构造器,则在枚举类中列出枚举值时
也必须对应的传入参数,表示调用对用的构造器创建枚举类对象。
六、
和普通java类一样,枚举类也可以实现一个或多个接口;
若需要每个枚举值(枚举类对象)在调用实现的接口的方法
中呈现不同的行为方式,则可以让每个枚举值分别来实现
接口的方法。
七、Enum类的常用方法:
枚举类默认都继承自Enum类,所以Enum类中的方法所有的枚举类
也都具备:
1>boolean | equals(Object obj):当指定对象等于此枚举值时,返回true。
2>int | hashCode():返回枚举值的哈希码。
/*
class类继承的Object类的toString()默认是输出类名和当前对象的哈希值;
enum类继承的Enum类的toString()默认是输出当前枚举值的名称。
当然toString()都是可以重写的。
*/
3>String | toString():返回枚举值的名称,它包含在声明中。
4>String | name():返回此枚举值的名称,在其枚举类声明中对其进行声明。
5>static <T extends Enum> T | valueOf(Class enumType,String name):
返回指定枚举类型中的指定名称的枚举值
其他参考:https://blog.csdn.net/pan_junbiao/article/details/85257445