Enum
Java枚举是一种特殊的类,用于表示固定数量的常量。通过学习Java枚举,我们可以更好地理解Java语言的特性和应用场景。
一、枚举基础
枚举类型是Java 5.0引入的新特性,主要用于表示一组固定数量的常量。枚举常量是该枚举类型的实例,每个常量都有一个唯一的名称和对应的值。例如,表示一周的七天、表示一年四季等。
二、枚举用法
-
声明枚举类型和常量:在声明枚举类型时,需要指定枚举常量的名称和值。例如:
enum WeekDay {
// 定义一周中的七天
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
2.每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。
以上的枚举类 WeekDay转化在内部类实现:
class WeekDay {
public static final WeekDay MONDAY = new WeekDay();
public static final WeekDay TUESDAY = new WeekDay();
public static final WeekDay WEDNESDAY = new WeekDay();
// 以此类推
}
-
使用枚举类型:在代码中可以直接使用枚举类型来表示常量。例如:
WeekDay day = WeekDay.MONDAY;
public class EnumDemo1 {
public static void main(String[] args) {
WeekDay monday = WeekDay.MONDAY;
System.out.println(monday); // Monday
WeekDay wednesday = WeekDay.WEDNESDAY;
switch (wednesday) {
case MONDAY :
System.out.println("今天是星期一");
break;
case TUESDAY :
System.out.println("今天是星二");
break;
case WEDNESDAY :
System.out.println("今天是星期三");
break;
case THURSDAY :
System.out.println("今天是星期四");
break;
case FRIDAY :
System.out.println("今天是星期五");
break;
case SATURDAY :
System.out.println("今天是星期六");
break;
case SUNDAY :
System.out.println("今天是星期七");
break;
}
// 输出 今天是星期三
}
}
-
枚举方法:枚举类型可以包含任意类型的成员变量和方法。例如:
public enum Day {
MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日");
private String chineseName; // 成员变量
Day(String chineseName) { // 构造函数
this.chineseName = chineseName;
}
public String getChineseName() { // 方法
return chineseName;
}
}
在这个例子中,Day枚举类型包含一个私有的成员变量chineseName和一个公有的构造函数。每个常量都有一个对应的chineseName值,通过调用getChineseName()方法可以获取该值。
-
枚举继承:枚举类型可以继承自其他类或实现其他接口。例如:
public interface Colors {
String RED = "红色";
String GREEN = "绿色";
String BLUE = "蓝色";
}
public enum WeekdayColor implements Colors {
MONDAY("红色"), TUESDAY("绿色"), WEDNESDAY("红色"), THURSDAY("绿色"), FRIDAY("红色"), SATURDAY("绿色"), SUNDAY("红色");
}
在这个例子中,WeekdayColor枚举类型实现了Colors接口,并实现了接口中的常量。这样就可以在WeekdayColor枚举类型中使用Colors接口中的常量。
三、枚举应用
枚举在Java中有很多应用场景,以下是其中的一些:
-
常量分组:在JDK 1.5之前,我们定义常量都是使用public static final。有了枚举,我们可以将相关的常量分组到一个枚举类型里,这使得代码更易读,而且枚举提供了比常量更多的方法。
-
替代整数常量:使用枚举类型代替整数常量可以提高代码的可读性和可维护性。例如,可以使用Weekday枚举类型代替整数常量来表示一周中的某一天。
-
表示状态:枚举类型可以用来表示某种状态,例如表示订单的状态(未支付、已支付、已发货)等。
-
表示选项:枚举类型可以用来表示某种选项,例如表示性别(男、女)、职业(学生、工人、教师)等。
-
在switch语句中使用:由于枚举类型是对象,因此可以在switch语句中使用。
-
参数化枚举:可以创建带有参数的枚举常量对象。
-
重写toString方法:可以重写枚举的toString方法以返回更有意义的字符串。
-
实现接口:枚举类可以实现接口,例如:
public interface Colors { String RED = "红色"; String GREEN = "绿色"; String BLUE = "蓝色"; }
,然后创建一个实现该接口的枚举类。 -
在集合中使用:可以将枚举类型放到集合中。
总的来说,使用枚举可以提高代码的清晰度和可维护性,防止多余数据的出现,以及使代码更加符合实际需求。