- 构造器私有化,防止直接new,因为season只有固定的四季
- 去set方法防止属性被修改
- 在类的内部,直接创建固定对象(本文以Season为例)
- 可以加上一个final修饰符,static,final一起使用有专门的优化,不需要调用类
class season{
private String name;
private String desc;
public final static season SPRING = new season("春天","");
public final static season SUMMER = new season("夏天","");
public final static season AUTUMN = new season("秋天","");
public final static season WINTER = new season("冬天","");
private season(String name, String desc) {
this.name = name;
this.desc = desc;
}
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;
// }
}
使用enum实现枚举类
- 使用关键字enum替代class
- public final static season SPRING = new season(“春天”,“”);可以使用SPRING(“春天”,“”);,和构造器对应
- 如果有多个常量(对象),可以使用‘,’间隔
- 如果使用enum实现枚举,要求把常量写在属性前
enum season02 {
SPRING("spring",""),SUMMER("",""),AUTUMN("",""),WINTER("","");
//常量写在前边
private String name;
private String desc;
season02(String name, String desc) {
this.name = name;
this.desc = desc;
}
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 final static season SPRING = new season(“春天”,“”)
后者只取决于,有几种编译器
-
name返回变量名,和Enum的toString方法效果相同
-
ordinal返回常量对象的次序,但是次序从零开始,可以来做比较
-
//values含有定义的所有枚举对象 Season02[] values = Season02.values(); for (int i = 0; i < values.length; i++) { System.out.println(values[i]); } -
valueof 将字符串转换成枚举对象Season02 autumn01 = Season02.valueOf(“AUTUMN”);
-
comperTo比较两个枚举对象,实质上是比较两个常量对象的ordinal编号
enum已经继承了Enum,因为Java单继承的特点,所以enum不能继续继承
但是enum可以实现接口
好了家人们,今天的学习分享到此结束,晚安



