介绍
Java枚举类是一种特殊的类,用于表示一组常量。它们在Java程序中非常有用,因为它们允许您将一组预定义的常量聚合在一起,并将它们视为单个实体。这样,可以减少代码量并提高代码可读性。
正文
一、定义枚举类
定义枚举类非常简单,只需要使用关键字“enum”:
public enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
这里定义了一个枚举类Weekday,包含了一周中的所有星期几。其中,MONDAY、TUESDAY等都是常量,它们的类型是Weekday,每个常量都用逗号分隔。
二、枚举类中的方法
在枚举类中,您可以定义构造函数、普通方法和静态方法。
1. 构造函数
与普通类一样,您可以在枚举类中定义构造函数。每个枚举常量都是枚举类的实例,因此您可以像普通类一样使用构造函数来初始化每个枚举常量。下面的例子展示了如何定义一个带有参数的构造函数:
public enum Weekday { MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日"); private String chineseName; Weekday(String chineseName) { this.chineseName = chineseName; } public String getChineseName() { return chineseName; } }
这里添加了一个带有一个参数的构造函数,用于为每个枚举常量设置中文名字。在定义枚举常量时,需要传入参数,如MONDAY("星期一")。
2. 普通方法
在枚举类中,您可以添加普通方法,使用方式与普通类类似。例如,在上面的Weekday枚举类中,我们定义了一个名为getChineseName的方法,用于获取中文名字。
3. 静态方法
除了普通方法之外,您也可以定义静态方法。静态方法仅与当前枚举类有关,而不与任何枚举常量实例有关。例如:
public enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; public static Weekday getRandomDay() { return values()[(int) (Math.random() * values().length)]; } }
在这个例子中,我们定义了一个名为getRandomDay的静态方法,用于返回一个随机星期几。
三、枚举类的常用方法
Java提供了一些常用的枚举类方法,我们可以使用它们来操作枚举常量。
1. values()方法
Java编译器会为每个枚举类型生成一个values()方法。这个values()方法可以返回存储在枚举类型中的所有枚举常量数组。比如:
Weekday[] weekdays = Weekday.values();
这里我们使用values()方法获取Weekday枚举类中的所有常量,并将它们存储在数组中。
2. valueOf()方法
valueOf()方法用于根据字符串获取枚举常量。如果您有一个字符串,想要获取对应的枚举常量,可以调用这个方法。例如:
Weekday weekday = Weekday.valueOf("MONDAY");
在这个例子中,valueof()方法会返回MONDAY枚举常量。
3. ordinal()方法
ordinal()方法用于获取枚举常量的索引,即它们在常量数组中的位置。例如:
int index = Weekday.MONDAY.ordinal();
在这个例子中,ordinal()方法会返回0,表示MONDAY是Weekday枚举类型中的第一个常量。
4. name()方法
name()方法用于获取枚举常量的名称。例如:
String name = Weekday.MONDAY.name();
在这个例子中,name()方法会返回字符串"MONDAY"。
四、小结
使用枚举类可以让代码更加简洁、明了,而且Java在枚举类上提供了许多不同的方法,可以用于操作枚举常量。在实际编程中,枚举类是非常有价值的。
代码示例
public enum Weekday { MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日"); private String chineseName; Weekday(String chineseName) { this.chineseName = chineseName; } public String getChineseName() { return chineseName; } public static Weekday getRandomDay() { return values()[(int) (Math.random() * values().length)]; } }