黑马程序员_JDK1.5新特性-枚举

------- android培训 java培训 、期待与您交流! ----------

关于枚举是为了解决程序员习惯了C语言的用法而对java无枚举

感到不适应而产生的,关键字为Enum
public abstract class Enum<E extends Enum<E>>extends

Objectimplements Comparable<E>, Serializable
构造方法摘要
protected  Enum(String name, int ordinal)
          单独的构造方法。
  方法摘要
protected  Object clone()
          抛出 CloneNotSupportedException。
 int compareTo(E o)
          比较此枚举与指定对象的顺序。
 boolean equals(Object other)
          当指定对象等于此枚举常量时,返回 true。
protected  void finalize()
          枚举类不能有 finalize 方法。
 Class<E> getDeclaringClass()
          返回与此枚举常量的枚举类型相对应的 Class 对象


 int hashCode()
          返回枚举常量的哈希码。
 String name()
          返回此枚举常量的名称,在其枚举声明中对其进行

声明。
 int ordinal()
          返回枚举常量的序数(它在枚举声明中的位置,其

中初始常量序数为零)。
 String toString()
          返回枚举常量的名称,它包含在声明中。
static <T extends Enum<T>>
T
 valueOf(Class<T> enumType, String name)
          返回带指定名称的指定枚举类型的枚举常量。
  从类 java.lang.Object 继承的方法
getClass, notify, notifyAll, wait, wait, wait
 

构造方法详细信息


Enum
protected Enum(String name,
               int ordinal)单独的构造方法。程序员无法调

用此构造方法。该构造方法用于由响应枚举类型声明的编译器

发出的代码。

参数:
name - - 此枚举常量的名称,它是用来声明该常量的标识符。
ordinal - - 枚举常量的序数(它在枚举声明中的位置,其中

初始常量序数为零)。
方法详细信息

name
public final String name()返回此枚举常量的名称,在其枚

举声明中对其进行声明。 与此方法相比,大多数程序员应该优

先考虑使用 toString() 方法,因为 toString 方法返回更加

用户友好的名称。该方法主要设计用于特殊情形,其正确性取

决于获取正确的名称,其名称不会随版本的改变而改变。

返回:
枚举常量的名称

-------------------------------------------------------

-------------------------

ordinal
public final int ordinal()返回枚举常量的序数(它在枚举

声明中的位置,其中初始常量序数为零)。 大多数程序员不会

使用此方法。它被设计用于复杂的基于枚举的数据结构,比如

EnumSet 和 EnumMap。

返回:
枚举常量的序数

-------------------------------------------------------

-------------------------

toString
public String toString()返回枚举常量的名称,它包含在声

明中。可以重写此方法,虽然一般来说没有必要。当存在更加

“程序员友好的”字符串形式时,应该使用枚举类型重写此方

法。

覆盖:
类 Object 中的 toString
返回:
枚举常量的名称

-------------------------------------------------------

-------------------------

equals
public final boolean equals(Object other)当指定对象等于

此枚举常量时,返回 true。

覆盖:
类 Object 中的 equals
参数:
other - 要与此对象进行相等性比较的对象。
返回:
如果指定对象等于此枚举常量,则返回 true。
另请参见:
Object.hashCode(), Hashtable

-------------------------------------------------------

-------------------------

hashCode
public final int hashCode()返回枚举常量的哈希码。

覆盖:
类 Object 中的 hashCode
返回:
枚举常量的哈希码。
另请参见:
Object.equals(java.lang.Object), Hashtable

-------------------------------------------------------

-------------------------

clone
protected final Object clone()
                      throws CloneNotSupportedException

抛出 CloneNotSupportedException。这可保证永远不会复制枚

举,这对于保留其“单元素”状态是必需的。

覆盖:
类 Object 中的 clone
返回:
此实例的一个副本。
抛出:
CloneNotSupportedException - 如果对象的类不支持

Cloneable 接口,则重写 clone 方法的子类也会抛出此异常,

以指示无法复制某个实例。
另请参见:
Cloneable

-------------------------------------------------------

-------------------------

compareTo
public final int compareTo(E o)比较此枚举与指定对象的顺

序。在该对象小于、等于或大于指定对象时,分别返回负整数

、零或正整数。 枚举常量只能与相同枚举类型的其他枚举常量

进行比较。该方法实现的自然顺序就是声明常量的顺序。

指定者:
接口 Comparable<E extends Enum<E>> 中的 compareTo
参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定

对象。

-------------------------------------------------------

-------------------------

getDeclaringClass
public final Class<E> getDeclaringClass()返回与此枚举常

量的枚举类型相对应的 Class 对象。当且仅当

e1.getDeclaringClass() == e2.getDeclaringClass() 时,两

个枚举常量 e1 和 e2 的枚举类型才相同。(由该方法返回的

值不同于由 Object.getClass() 方法返回的值,

Object.getClass() 方法用于带有特定常量的类主体的枚举常

量。)

返回:
与此枚举常量的枚举类型相对应的 Class 对象

-------------------------------------------------------

-------------------------

valueOf
public static <T extends Enum<T>> T valueOf(Class<T>

enumType,
                                            String

name)返回带指定名称的指定枚举类型的枚举常量。名称必须与

在此类型中声明枚举常量所用的标识符完全匹配。(不允许使

用额外的空白字符。)

参数:
enumType - 要从中返回常量的枚举类型的 Class 对象
name - 要返回的常量名称
返回:
带指定名称的指定枚举类型的枚举常量
抛出:
IllegalArgumentException - 如果指定枚举类型不包含指定名

称的常量,或者指定类对象不表示枚举类型
NullPointerException - 如果 enumType 或 name 为空
从以下版本开始:
1.5

-------------------------------------------------------

-------------------------

finalize
protected final void finalize()枚举类不能有 finalize 方

法。

覆盖:
类 Object 中的 finalize
枚举的元素就是该枚举的对象,使用起来非常方便
还有类集关于枚举的支持:
public class EnumMap<K extends Enum<K>,V>extends

AbstractMap<K,V>implements Serializable, Cloneable与枚

举类型键一起使用的专用 Map 实现。枚举映射中所有键都必须

来自单个枚举类型,该枚举类型在创建映射时显式或隐式地指

定。枚举映射在内部表示为数组。此表示形式非常紧凑且高效

枚举映射根据其键的自然顺序 来维护(该顺序是声明枚举常量

的顺序)。在 collection 视图(keySet()、entrySet() 和

values())所返回的迭代器中反映了这一点。

由 collection 视图返回的迭代器是弱一致 的:它们不会抛出

ConcurrentModificationException,也不一定显示在迭代进行

时发生的任何映射修改的效果。

不允许使用 null 键。试图插入 null 键将抛出

NullPointerException。但是,试图测试是否出现 null 键或

移除 null 键将不会抛出异常。允许使用 null 值。

像大多数 collection 一样,EnumMap 是不同步的。如果多个

线程同时访问一个枚举映射,并且至少有一个线程修改该映射

,则此枚举映射在外部应该是同步的。这一般通过对自然封装

该枚举映射的某个对象进行同步来完成。如果不存在这样的对

象,则应该使用 Collections.synchronizedMap

(java.util.Map) 方法来“包装”该枚举。最好在创建时完成

这一操作,以防止意外的非同步访问:

     Map<EnumKey, V> m
         = Collections.synchronizedMap(new

EnumMap<EnumKey, V>(...));
 实现注意事项:所有基本操作都在固定时间内执行。虽然并不

保证,但它们很可能比其 HashMap 副本更快


public abstract class EnumSet<E extends Enum<E>>extends

AbstractSet<E>implements Cloneable, Serializable与枚举

类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来

自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定

。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效

。此类的空间和时间性能应该很好,足以用作传统上基于 int

的“位标志”的替换形式,具有高品质、类型安全的优势。如

果其参数也是一个枚举 set,则批量操作(如 containsAll 和

retainAll)也应运行得非常快。

由 iterator 方法返回的迭代器按其自然顺序 遍历这些元素(

该顺序是声明枚举常量的顺序)。返回的迭代器是弱一致的:

它从不抛出 ConcurrentModificationException,也不一定显

示在迭代进行时发生的任何 set 修改的效果。

不允许使用 null 元素。试图插入 null 元素将抛出

NullPointerException。但是,试图测试是否出现 null 元素

或移除 null 元素将不会抛出异常。

像大多数 collection 实现一样,EnumSet 是不同步的。如果

多个线程同时访问一个枚举 set,并且至少有一个线程修改该

set,则此枚举 set 在外部应该是同步的。这通常是通过对自

然封装该枚举 set 的对象执行同步操作来完成的。如果不存在

这样的对象,则应该使用 Collections.synchronizedSet

(java.util.Set) 方法来“包装”该 set。最好在创建时完成

这一操作,以防止意外的非同步访问:

 Set<MyEnum> s = Collections.synchronizedSet

(EnumSet.noneOf(MyEnum.class));
 实现注意事项:所有基本操作都在固定时间内执行。虽然并不

保证,但它们很可能比其 HashSet 副本更快。如果其参数也是

一个枚举 set ,则批量操作会在固定时间内执行。

 

------- android培训 java培训 、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值