什么是枚举类?
从JDK1.5之后,出现了枚举类这么一个概念,就是使用enum关键字来定义枚举类,枚举类enum是引用数据类型,可以简单地理解为一种特殊的java类。
枚举类的对象个数是有限的且固定的,可以将每一个对象一一列举出来。
枚举类的作用?
在了解枚举类作用之前,我们可以比较JDK1.5之前没有枚举类是如何实现控制一个类中的对象个数是有限的且是固定的(设计思路就是:静态常量和单例模式)
下面设计一个普通的Week类,在该类定义7个对象分别对应一周七天
代码实现如:
/**
* 类描述:周次,一周有七天
*/
public class Week {
// 注意:为了控制Week这个类中的对象个数有限个且固定,所以我们可以使用单例模式的思想
// 构造方法私有,保证外部不能随意创建对象
private Week() {}
// 所有对象都是属性,类似单例模式中private static Singleton singleton = new Singleton();
// 这里定义为public是为了外部可以直接通过类来使用这个属性,static final静态常量
public static final Week monday = new Week();
public static final Week tuesday = new Week();
public static final Week wednesday = new Week();
public static final Week thursday = new Week();
public static final Week friday = new Week();
public static final Week saturday = new Week();
public static final Week sunday = new Week();
}
上面是普通类定义对象有限个且固定的方式,代码有点长比较麻烦
有了枚举类之后,比原来实现的方式方便了很多很多:
如:
/**
* 枚举类
*/
public enum WeekEnum {
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday
}
注意:枚举类型的对象,默认继承了Enum抽象类(在java.lang包下),间接继承了Object类
其中Enum抽象类如下:
public abstract class Enum<E extends Enum<E>>
implements Comparable<E>, Serializable {
private final String name; // 枚举对象的名字
public final String name() {
return name;
}
private final int ordinal; // 枚举类中创建的对象的索引,从0开始
public final int ordinal() {
return ordinal;
}
protected Enum(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
}
public String toString() {
return name;
}
// final修饰,表示不可重写
public final boolean equals(Object other) {
return this==other;
}
// final修饰,表示不可重写
public final int hashCode() {
return super.hashCode();
}
}
解析下Enum抽象类:有两个属性分别是name和ordinal
name:枚举对象的名字 可以通过name()获取name属性
ordinal:枚举对象在类中列举的属性,类似index,从0开始
valueOf() 通过给定的name获取对应的枚举对象,就好像包装类装箱过程
values()获取全部的枚举对象,返回一个数组Day[]
compareTo() 可以比较两个枚举对象 返回值是int类型
浙公网安备 33010602011771号