目录
枚举类型:
应用场景:
在某些情况下,一个类的对象的个数是有限的,
如季节,春夏秋冬,比如24节气,星期等等...
规定这个类的对象的个数。
public class SeasonConstant {
public static final Integer SPRING=1;
public static final Integer SUMMER=2;
public static final Integer AUTUMN=3;
public static final Integer WINNER=4;
}
以前没有枚举的时候是这样写的
但是这样扩展很差。
枚举:enum
public enum Season {
private Integer value;
private String name;
private Season(){}
private Season(Integer value, String name) {
this.value = value;
this.name = name;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static final Season SPRING = new Season(1,"春天");
public static final Season SUMMER = new Season(2,"夏天");
public static final Season AUTUMN = new Season(3,"秋天");
public static final Season WINNER = new Season(4,"冬天");
}
大更新:
JDK5更新了枚举类
枚举类的命名规则:所有的枚举类要以Enum结尾。
枚举类中把需要用的到的对象声明出来
写对应的构造器,可以有set,get方法。
前面那些public static final 类名...太罗嗦,我可不可以删掉呢?可以:
这样写可以省略无参构造方法,
public enum SeasonEnum {
SPRING(1,"春天"),
SUMMER(2,"夏天"),
AUTUMN(3,"秋天"),
WINNER(4,"冬天");
private Integer value;
private String name;
SeasonEnum(Integer value, String name) {
this.value = value;
this.name = name;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
枚举的静态导入:
*号代表导入枚举类的所有对象:
import static com.jsoft.afternoon.SeasonEnum.*;
这样使用:(但一般不会导入。)
public class Ch04 {
public static void main(String[] args) {
System.out.println(SPRING.getName());
}
}
JDK1.5之后
枚举可以在switch里使用:
public class Ch03 {
public static void main(String[] args) {
SeasonEnum season = SeasonEnum.SPRING;
switch (season) {
case SPRING://方法体
case SUMMER://
case AUTUMN://
case WINNER://
}
}
}
利用枚举类实现单例模式:
高效JAVA,单元素的枚举类型已经成为实现单例模式的最佳方案。
class Singleton {
// 私有化构造器
private Singleton() {}
// 提供公有的获取实例的静态方法
public static Singleton getInstance(){
return SingletonHolder.INSTANT.instant;
}
// 声明一个枚举类(内部类)
private enum SingletonHolder{
INSTANT;
private final Singleton instant;
SingletonHolder() {
instant = new Singleton();
}
}
}
public class Ch05 {
public static void main(String[] args) {
System.out.println(Singleton.getInstance() == Singleton.getInstance());
}
}
枚举的优势:
1.int类型不具备安全性。假如某个程序员在定义int时少写了个final,会存在被他人修改的风险。枚举类,它天然就是一个常量类
2.使用int类型,语义不够明确。
枚举里面都是常量,静态 ,荐枚举的比较使用 ==