枚举
枚举(Enum
)是一种特殊的数据类型,用于定义一组命名的常量。是引用数据类型,用于定义一组命名的常量。枚举常用于表示一组相关的常量,并且可以增加额外的属性和方法。
在 Java 中,枚举是一种类,可以定义成员变量和方法。
示例:
public enum Day {
//定义枚举常量
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}
class TestEnum{
public static void main(String[] args) throws Exception {
//使用枚举常量
Day today = Day.FRIDAY;
//访问枚举常量
System.out.println("Today is " + today);
Scanner sc =new Scanner(System.in);
System.out.println("请输入");
String day = sc.next();
//使用switch语句处理枚举
switch (day){
case "FRIDAY" -> System.out.println(today.name());
case "SUNDAY"-> System.out.println("星期天了,可以去约会啦");
case "MONDAY" -> System.out.println("星期一,又要开始上班了");
default -> throw new Exception("您的输入有误");
}
}
}
除了继承
Enum
类之外,枚举类型还可以实现接口,并重写接口中的方法。这使得枚举类型能够拥有自己的行为和特性。枚举的常量必须写在第一行,并且这些常量的类型为枚举名(如上述类型为 Day)
需要注意的是,在 Java 中,由于类只能单继承,所以枚举类型不能再继承其他类( 隐式
final
修饰 ),但是可以实现多个接口。
- 枚举不能被克隆、反射
- 枚举是天然的单例模式
构造函数
枚举可以像其他类一样拥有构造函数(不能实例化)、成员变量和成员方法,不能被继承。
示例:
public enum Day1 {
SUNDAY("星期天"), MONDAY, TUESDAY, WEDNESDAY("星期三"), THURSDAY, FRIDAY, SATURDAY;
private String name;
//无参构造
Day1(){}
//有参构造
Day1(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Day1Test{
public static void main(String[] args) {
//使用枚举常量
Day1 today = Day1.WEDNESDAY;
//访问枚举常量的值
System.out.println("Today is " + today + today.getName());
}
}
在实际开发在中,枚举常用于管理固定的常量集合,例如星期、月份、状态等。使用枚举可以是代码更具可读性和可维护性。
枚举常用的方法
1. value()
values()
方法返回一个包含枚举类型所有枚举常量的数组。该方法允许我们遍历枚举中的所有的值。
public class Values {
enum Day{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}
public static void main(String[] args){
Day[] allDays = Day.values();
for (Day day :allDays){
System.out.println(day);
}
}
}
2. ordinal()
ordinal()
方法返回一个枚举常量在枚举类型中的索引位置(从0开始)。注意,ordinal() 方法在某些情况下可能不是一样高很好的选择,因为它依赖于枚举常量的声明顺序,而这个顺序可能会在代码维护过程中发生变化。
public class Ordinal {
enum Month{
JANUARY, FEBRUARY, MARCH,APRIL,MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
}
public static void main(String[] args){
Month mymonth = Month.AUGUST;
int position =mymonth.ordinal();
System.out.println( mymonth + " is " + position);//AUGUST is 7
}
}
3. valueOf()
valueOf()
方法允许通过枚举常量的名称来获取对应的枚举类型实例。它将一个字符串转换成对应的枚举常量。
public class ValueOf {
enum color{
RED,GREEN,BLUE
}
public static void main(String[] args) {
String colorName = "GREEN";
color mycolor = color.valueOf(colorName);
System.out.println( "最喜欢的颜色是" + mycolor);//最喜欢的颜色是GREEN
}
}