深入浅出Java枚举类
- 枚举是一组常量的集合
- 枚举是一种特殊的类,里面只包含一组有限的特定对象
需求分析:创建一个季节类,实现四个季节对象的创建
class Season{
private String name;
private String desc;
//快捷键生成 get 和 set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
//生成构造方法
public Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
}
在主方法中的调用:
Season spring = new Season("春天", "sunny");
Season winter = new Season("冬天", "cold");
Season summer = new Season("夏天", "hot");
Season autumn = new Season("秋天", "cool");
因为总所周知,季节只有春夏秋冬,所以我们不希望创建更多的对象,也不希望季节信息在初始化后被修改,至此,引出枚举类
通过枚举类优化后:
class Season{
//定义两个属性 季节名字和描述
private String name;
private String desc;
//将构造器设置为私有的
private Season(String name, String desc){
this.name = name;
this.desc = desc;
}
//只设置Get方法
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
//创建四个季节变量
static final Season SPRING = new Season("春天", "sunny");
static final Season WINTER = new Season("冬天", "cold");
static final Season SUMMER = new Season("夏天", "hot");
static final Season AUTUMN= new Season("秋天", "cool");
//重写toString方法,为了查看Season对象的信息
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
输出效果:
自定义枚举类实现枚举
- 不需要设置
setXXX()
方法,因为枚举类对象的功能大多数都是只读 - 枚举对象属性用
static + final
修饰,实现底层优化
使用static是为了直接通过 类名.属性 就可以完成调用
使用final 是因为在类加载的时候,就会加载这些静态变量和方法,定义为 final 就不会被自动加载
- 枚举对象名参考常量的命名规则,采用大写英文字母的形式
- 枚举对象可以有多个属性