一、枚举类的使用
- 枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类
- 当需要定义一组常量时,强烈建议使用枚举类
- 如果枚举类中只有一个对象,则可以作为单例模式的实现方式。
二、定义
jdk5.0之前,自定义枚举类
- 声明Season对象的属性,private final修饰
- 私有化类的构造器,并给对象属性赋值
- 提供当前枚举类的多个对象:public static final
class Season{
private final String seasonName,seasonDesc;
private Season(String seasonName,String seasonDesc) {
this.seasonDesc=seasonDesc;
this.seasonName=seasonName;
}
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("冬天","冰天雪地");
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
jdk5.0,可以使用enum关键字定义枚举类
说明:定义的枚举类默认继承于java.Lang.Enum类
enum SeasonWord implements Info{
//1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
SPRING("春天","春暖花开"){
@Override
public void show() {
System.out.println("春天在哪里?");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public void show() {
System.out.println("宁静的夏天 ?");
}
},
AUTUMN("秋天","秋风飒飒"){
@Override
public void show() {
System.out.println("秋天不回来?");
}
},
WINTER("冬天","冰天雪地"){
@Override
public void show() {
System.out.println("大约在冬季?");
}
};
private final String seasonName,seasonDesc;
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
SeasonWord(String seasonName,String seasonDesc) {
this.seasonDesc=seasonDesc;
this.seasonName=seasonName;
}
// @Override
// public void show() {
// System.out.println("这是一个季节");
// }
}
interface Info{
void show();
}
三、常用方法
- values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
- valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象
- toString():返回当前举类对象常量的名称
四、实现接口
- 实现接口,在enum类中实现抽象方法
- 让枚举类的对象分别实现接口中的抽象方法
public class SeasonTest {
public static void main(String[] args) {
System.out.println(Season.AUTUMN);
System.out.println(SeasonWord.WINTER);
System.out.println(SeasonWord.class.getSuperclass());
SeasonWord winter = SeasonWord.WINTER;
winter.show();
}
}