枚举类
- 枚举类的使用
- 定义枚举类
- Enum类中的常用方法
枚举类的使用
1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类
2.当需要定义一组常量时,强烈建议使用枚举类
3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。
定义枚举类
方式一: jdk5.0之前,自定义枚举类
方式二:jdk5.0,可以使用enum关键字定义枚举类
方式一:
public class 自定义 {
public static void main(String[] args) {
Season season=Season.SPRING;
System.out.println(season);
}
}
//自定义枚举类
class Season{
//1、声明Season对象的属性
private final String seasonName;
private final String seasonDesc;
//2、私有化类的构造器;并给对象属性赋值
private Season(String seasonName, String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3、提供当前类的多个对象 public static final
public static final Season SPRING=new Season("春天","春暖花开");
public static final Season SUMMER=new Season("夏天","夏日炎炎");
public static final Season AUTUMN=new Season("秋天","秋高气爽");
public static final Season WINTER=new Season("冬天","冰天雪地");
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
方式二:
public class 关键字enum {
public static void main(String[] args) {
Season1 summer = Season1.SUMMER;
System.out.println(summer);
}
}
enum Season1{
//1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束,且必须放在类开头
SPRING("春天","春暖花开"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","冰天雪地");
//2、声明Season对象的属性
private final String seasonName;
private final String seasonDesc;
//3、私有化类的构造器;并给对象属性赋值
private Season1(String seasonName, String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
}
Enum类中的常用方法
使用enum关键字定义的枚举类实现接口的情况
情况一:实现接口,在enum类中实现抽象方法.
情况二:让枚举类的对象分别实现接口中的抽象方法.
方法 | 描述 |
---|---|
valueOf() | 传递枚举类型的Class对象和枚举常量名称给静态方法valueOf,会得到与参数匹配的枚举常量。 |
toString() | 得到当前枚举常量的名称。你可以通过重写这个方法来使得到的结果更易读。 |
equals() | 在枚举类型中可以直接使用"== " 来比较两个枚举常量是否相等。Enum提供的这个equals0方法,也是直接使用 =="实现的。它的存在是为了在Set、List和 Map中使用。注意,equals()是不可变的。 |
hashCode() | Enum实现了hashCode()来和equals()保持一致。它也是不可变的。 |
getDeclaringClass() | 得到枚举常量所属枚举类型的Class对象。可以用它来判断两个枚举常量是否属于同一个枚举类型。 |
name | 得到当前枚举常量的名称。建议优先使用toString()。 |
ordinal | 得到当前枚举常量的次序。 |
compareTo() | 枚举类型实现了Comparable接口,这样可以比较两个枚举常童的大小(按照声明的顺序排列) |
clone() | 枚举类型不能被Clone。为了防止子类实现克隆方法,Enum实现了一个仅抛出CloneNotSupportedException异常的不变Clone()o |