枚举类
定义枚举类
JDK5.0之前
定义方法:
class Season {
// 声明当前类的对象的实例变量,使用private final修饰
private final String seasonName;
// 私有化类的构造器
private Season(String seasonName) {
this.seasonName = seasonName;
}
// 提供实例变量的get方法
public String getSeasonName() {
return seasonName;
}
// 创建当前类的实例,需要使用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 + '\'' +
'}';
}
}
使用:
由于实例是静态的,可以直接使用类名进行访问,但是不能修改
System.out.println(Season.AUTUMN.getSeasonName());
System.out.println(Season.AUTUMN);
使用关键字enum
JDK5.0引入了关键字enum直接定义
enum Season {
// 必须在最开始声明对象,使用,隔开
SPRING("春天"),
SUMMER("夏天"),
AUTUMN("秋天"),
WINTER("冬天");
// 声明当前类的对象的实例变量,使用private final修饰
private final String seasonName;
// 私有化类的构造器
private Season(String seasonName) {
this.seasonName = seasonName;
}
// 提供实例变量的get方法
public String getSeasonName() {
return seasonName;
}
// 创建当前类的实例,需要使用public static final修饰
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
'}';
}
}
默认父类是class java.lang.Enum,不能再显示的继承其他类
enum常用方法
toString()
System.out.println(Season.AUTUMN.toString());
不重写默认打印类名
name()
System.out.println(Season.AUTUMN.name());
打印类名
values()
Season[] values = Season.values();
for (Season s:values
) {
System.out.println(s);
}
返回数组,包含枚举类的所有对象
valueOf()
String name = "WINTER";
Season obj = Season.valueOf(name);
System.out.println(obj);
返回枚举类中名字为Xxx的对象,没有相应的对象就会报错
枚举类实现接口
关键在于掌握不同对象分别实现接口
interface Info {
void show();
}
enum Season implements Info{
// 必须在最开始声明对象,使用,隔开
SPRING("春天"){
@Override
public void show() {
System.out.println("SPRING");
}
},
SUMMER("夏天"){
@Override
public void show() {
System.out.println("SUMMER");
}
},
AUTUMN("秋天"){
@Override
public void show() {
System.out.println("AUTUMN");
}
},
WINTER("冬天"){
@Override
public void show() {
System.out.println("WINTER");
}
};
// 声明当前类的对象的实例变量,使用private final修饰
private final String seasonName;
// 私有化类的构造器
private Season(String seasonName) {
this.seasonName = seasonName;
}
// 提供实例变量的get方法
public String getSeasonName() {
return seasonName;
}
// 创建当前类的实例,需要使用public static final修饰
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
'}';
}
}
练习
使用枚举类实现单例模式:
练习题#枚举类实现单例模式
回忆单例设计模式