枚举类

定义枚举类

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 + '\'' +
                '}';
    }
}

练习

使用枚举类实现单例模式:
练习题#枚举类实现单例模式
回忆单例设计模式