Java基础学习——枚举类
前几天在面试中被问到了枚举类,现在就把枚举类的相关知识点总结在下面。
- 枚举可以用enum关键字来定义,枚举类型的取值默认是public static final。划重点了,虽然没有直接用final来修饰,但枚举类默认是final的,也就是说,枚举类不能被继承!
- 枚举类的构造方法默认是private。
- 用enum定义的枚举类是默认继承java.lang.Enum类的,而Enum实现了Comparable和Serializable两个接口,这证明了枚举类可以使用比较器或进行序列化操作。
- 枚举类的主要操作方法如下:
序号 | 方法 | 类型 | 描述 |
---|
1 | protected Enum(String name,int ordinal) | 构造 | 接收枚举的名称和枚举的常量创建枚举对象 |
2 | protected final Object clone() throws CloneNotSupportedException | 普通 | 克隆枚举对象 |
3 | public final int compareTo(E o) | 普通 | 对象比较 |
4 | public final boolean equals(Object other) | 普通 | 对象比较 |
5 | public final int hashCode() | 普通 | 返回枚举常量的哈希码 |
6 | public final String name() | 普通 | 返回此枚举的名称 |
7 | public final ordinal() | 普通 | 返回枚举常量的序数 |
8 | public static <T extends Enum<T>> T valueOf(class<T> enumType,String name) | 普通 | 返回带指定名称的指定枚举类型的枚举常量 |
- 在JDK1.5之后,java.util包里提供了两个新的集合操作类:EnumMap和EnumSet,EnumMap类提供了java.util.Map接口的一个特殊实现,该类中的键(key)是一个枚举类型;EnumSet类提供了java.util.Set接口的一个特殊实现。
EnumSet是Set接口的一个特殊实现,所以里面的内容是无法重复的。使用EnumSet时是不能直接使用关键字new为其进行实例化,而是应该使用本类中提供的静态方法,如下(类型全是普通,complementOf方法描述起来有点抽象,看看例程就能理解)
序号 | 方法 | 描述 |
---|
1 | allOf | 将枚举中的全部内容设置到EnumSet中 |
2 | of | 创建一个包含枚举指定内容的EnumSet对象 |
3 | copyOf | 创建一个从指定Collection中指定的EnumSet’对象 |
4 | complementOf | 创建一个其元素类型与指定枚举set相同的枚举set,最初包含指定集合中所不包含的此类型的所有元素 |
5 | nuneOf | 创建一个可以接收指定类型的空集合 |