Java里的枚举
枚举是一种特殊的数据类型,在Java中,枚举用于定义一组常量。枚举可以包含多个枚举常量,每个枚举常量都是一个特定的实例。枚举常量之间用逗号分隔,并且使用大写字母命名。
枚举常量可以有属性和方法,使得枚举类型更加灵活和功能强大。在Java中,枚举常量是单例的,即每个枚举常量只会在内存中存在一个实例。
下面是一个简单的枚举示例:
enum Season {
SPRING, SUMMER, AUTUMN, WINTER;
}
public class EnumExample {
public static void main(String[] args) {
Season season = Season.SUMMER;
System.out.println(season); // 输出:SUMMER
}
}
在这个例子中,我们定义了一个Season枚举,包含四个枚举常量:SPRING、SUMMER、AUTUMN和WINTER。我们可以使用枚举常量来创建一个枚举变量,并输出它的值。
枚举常量还可以有属性和方法。我们可以像下面这样在枚举中定义属性和方法:
enum Season {
SPRING(1), SUMMER(2), AUTUMN(3), WINTER(4);
private int value;
Season(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
public class EnumExample {
public static void main(String[] args) {
Season season = Season.SUMMER;
System.out.println(season.getValue()); // 输出:2
}
}
在这个例子中,我们在Season枚举中定义了一个int类型的value属性,并且在构造函数中为每个枚举常量分配了一个值。我们还定义了一个getValue方法来获取value属性的值。
枚举常量在使用时,可以像普通变量一样进行比较。我们可以使用==运算符来比较两个枚举常量是否相等:
enum Season {
SPRING, SUMMER, AUTUMN, WINTER;
}
public class EnumExample {
public static void main(String[] args) {
Season season1 = Season.SUMMER;
Season season2 = Season.WINTER;
System.out.println(season1 == season2); // 输出:false
}
}
在这个例子中,我们创建了两个Season枚举变量,然后使用==运算符比较它们的值,结果为false。
枚举常量可以用于switch语句中,使代码更加清晰和易读。例如,我们可以使用枚举常量来表示一周的天数,并使用switch语句来处理每个天数:
enum DayOfWeek {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
public class EnumExample {
public static void main(String[] args) {
DayOfWeek day = DayOfWeek.SUNDAY;
switch (day) {
case MONDAY:
System.out.println("Today is Monday");
break;
case TUESDAY:
System.out.println("Today is Tuesday");
break;
case WEDNESDAY:
System.out.println("Today is Wednesday");
break;
case THURSDAY:
System.out.println("Today is Thursday");
break;
case FRIDAY:
System.out.println("Today is Friday");
break;
case SATURDAY:
System.out.println("Today is Saturday");
break;
case SUNDAY:
System.out.println("Today is Sunday");
break;
}
}
}
在这个例子中,我们使用DayOfWeek枚举来表示一周的每一天。然后我们根据当前的日期使用switch语句来输出对应的周几。
枚举常量还可以实现接口,这样就可以为每个枚举常量定义不同的行为。例如,我们可以使用枚举常量来表示不同的颜色,并为每个颜色定义不同的方法:
interface Color {
void printColor();
}
enum RainbowColor implements Color {
RED {
@Override
public void printColor() {
System.out.println("Red");
}
},
ORANGE {
@Override
public void printColor() {
System.out.println("Orange");