一、简介
有时候我们想创建一个固定的常量表来代表一些恒定不变,或者我们不想去改变的东西。例如春夏秋冬四季和八大行星的顺序等。这个时候,我们就可以用到Java里面一个相对较新的概念,“枚举”(Enumeration)。
二、什么是枚举
枚举可以看做是类(class)的一种,用enum作为修饰附。一般我们都用大写字母来表示枚举里的项(两个单词用下划线连接)。正如我们上文所说的,枚举是用作代表“固定”的常量链,因此枚举类实际默认含有Public, Static 和 final。下面我们来看一个一年四季的枚举的代码。
三、如何创建和使用枚举
public enum Season {
SPRING("Spring is comfortable", 1),
SUMMER("Summer is hot", 2),
AUTUMN("Autumn is chill", 3),
WINTER("Winter is coming", 4);
public String season;
int order;
Season(String season, int order) {
this.season = season;
this.order = order;
}
}
这里我们创建一个春夏秋冬四季项的枚举类(演示中暂不封装)。可以看到原本class的修饰符我们换成了enum。从上面的例子我们可以看到,枚举的关键就是四个大写的春夏秋冬项。每个枚举项里都可以有自己的附的值,也有自己的构造器。(这么说来,也可以理解为每个枚举项其实就是自己的final static的对象实例)。
为了更好解释枚举项每个成分的意义,我们写一段方法实例:
System.out.println(Season.SUMMER.season);//引用夏天项里的内容
System.out.println(Season.values());//整个枚举类的哈希
System.out.println(Season.SUMMER.order);//引用我们自己定义的顺序
System.out.println(Season.SPRING);//显示春天项
System.out.println(Season.SUMMER.ordinal());//显示系统默认的顺序
这里我们可以看到,枚举项不关有我们在构造器里加的属性,而且其自身本来也会有一个顺序【0开始】,可以通过ordinal来提取。以下是输出的结果:
Summer is hot
[LEnumDemo.Season;@4eec7777
2
SPRING
1
四、实际的应用
这里我们用以上的代码生成一个根据春夏秋冬来提醒用户不同天气的天气提醒器。
public class WeatherReminder {
String reminder;
public String getReminder(Season currentSeason){
switch (currentSeason){
case SPRING:
reminder = Season.SPRING.season;
break;
case SUMMER:
reminder = Season.SUMMER.season;
break;
case AUTUMN:
reminder = Season.AUTUMN.season;
break;
case WINTER:
reminder = Season.WINTER.season;
break;
}
return reminder;
}
}
这里我们可以看到,生成的WeatherReminder有一个getReminder的方法,可以通过用户输入的枚举项来输出对应的结果:
public class Main {
public static void main(String[] args) {
WeatherReminder reminder = new WeatherReminder();
System.out.println(reminder.getReminder(Season.AUTUMN));
}
}
以上测试类的结果就是我们在Season里面创建的remind:
Autumn is chill
五、总结
枚举是用来代表一些恒定不变,或者我们不想去改变的东西。类(class)的一种,用enum作为修饰附(默认含有Public, Static 和 final)。枚举类可以创建其自己的构造器,方法和字段,可以进行灵活的调整使用。具有较好的安全性及稳定性。