黑马程序员_枚举

来源:互联网 发布:回溯算法与n皇后问题 编辑:程序博客网 时间:2024/06/06 02:10

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


在某些情况下,一个类的对象是有限而且固定的。例如季节类,只能有 4 个对象。,若枚举只有一个成员, 则可以作为一种单子模式的实现方式。

在JDK1.5之前,枚举类需要通过一下方法实现:

1. private 修饰构造器
2. 属性使用 private final 修饰

3. 在类的内部创建实例对象,并把该类的所有实例都使用 public static final 来修饰


使用 enum 定义枚举类:

JDK 1.5 新增的 enum 关键字用于定义枚举类,枚举类有如下特征:

1. 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类
2. 枚举类的构造器只能使用 private 访问控制符
3. 枚举类的所有实例必须在枚举类中显式列出(, 分隔    ; 结尾). 列出的实例系统会自动添加 public static final 修饰
4. 所有的枚举类都提供了一个 values 方法, 该方法可以很方便地遍历所有的枚举值

注:DK 1.5 中可以在 switch 表达式中使用枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定


枚举类的属性:

1.枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰;
2.枚举类使用 private final 修饰的属性应该在构造器中为其赋值;
3.若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数;


实现接口的枚举类

和普通 Java 类一样枚举类可以实现一个或多个接口,若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法。


枚举类的常用方法:

valueOf()   传递枚举类行的Class对象和枚举类常量名称的静态方法,该方法会得到与参数匹配的枚举常量。

toString()  得到当前枚举常量的名称,可以通过重写这个方法来使得到的结果更易读。

equals()    在枚举类中可以直接使用==来比较两个枚举常量是否相等,枚举类提供的这个equals方法,也是直接使用==实现的,它的存在时为了在集合中使用,且不可改变的。

hashCode()   枚举类实现了hashCode()来和equals()保持一致。它也是不可变的。

getDeclaringClass()   得到枚举常量所属枚举类型的Class对象。可以用它来判断两个枚举常量是否属于同一个枚举类型。

name()   得到当前枚举类常量的名称。

ordinal()   得到当前枚举常量的次序。

compareTo()   枚举类型实现了Comparable接口,这样可以比较两个枚举常量的大小。

clone()   枚举类不能被clone,为了防止子类实现克隆方法,枚举类实现了一个仅抛出CloneNotSupportedException异常的不变clone。


---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------