在 Java 中,枚举是一种特殊的数据类型,用于定义一组命名的常量。
- 枚举通过为整数值赋予有意义的名称,帮助我们提升程序的可读性、可维护性以及类型安全性。
- 当一个变量只有几种有限的取值可能性时,枚举非常有用,例如方向(东南西北)、星期几等场景。
目录
创建枚举
语法:
> enum EnumName {
>
> CONSTANT1, CONSTANT2, CONSTANT3;
>
> }
Java
enum TrafficLight {
RED, GREEN, YELLOW;
}
public class Test{
public static void main(String[] args){
TrafficLight x = TrafficLight.RED;
System.out.println(x);
}
}
输出
RED
Java 中的枚举声明
枚举可以在类外部声明,也可以在类内部声明,但不能在方法内部声明。
1. 在类外部声明
正如我们在上面的示例中看到的那样,枚举可以在类外部声明,并且可以直接被访问。
2. 在类内部声明
枚举也可以在类内部声明,但同样不能在方法内部声明。
Java
public class Test {
enum Color {
RED,
GREEN,
BLUE;
}
// Driver method
public static void main(String[] args) {
Color c1 = Color.RED;
System.out.println(c1);
}
}
输出
RED
Java 枚举的特性
枚举遵循以下特定的属性:
- 类类型: 枚举在内部是通过类来实现的。
- 枚举常量: 每一个枚举常量都是该枚举类型的一个实例对象。
- Switch 支持: 枚举可以用于 switch 语句中。
- 隐式修饰符: 枚举常量默认是
public static final的。 - 继承关系: 枚举不能继承(extend)其他类,但可以实现(implement)接口。
在 Switch 语句中使用枚举
我们可以在 switch 语句中使用枚举,以便根据不同的枚举常量来处理不同的逻辑分支。
Java
import java.io.*;
class GFG{
// Enum Declared
enum Color {
RED,
GREEN,
BLUE,
YELLOW;
}
public static void main(String[] args){
Color var_1 = Color.YELLOW;
// Switch case with Enum
switch (var_1) {
case RED:
System.out.println("Red color");
break;
case GREEN:
System.out.println("Green color");
break;
case BLUE:
System.out.println("Blue color");
break;
default:
System.out.println("Other color");
}
}
}
输出
Other color
带有方法和构造函数的枚举
枚举可以包含构造函数和方法,这些代码会针对每个常量分别执行。
Java
enum Color{
RED, GREEN, BLUE;
private Color(){
System.out.println("Constructor called for: " + this);
}
public void display(){
System.out.println("Color is: " + this);
}
}
public class Test{
public static void main(String[] args){
Color c1 = Color.RED;
c1.display();
}
}
输出
Constructor called for: RED
Constructor called for: GREEN
Constructor called for: BLUE
Color is: RED
带有抽象方法的枚举
枚举可以声明抽象方法,然后由每一个枚举常量分别实现该方法。
Java
enum Day{
MONDAY{
public String getNumber(){
return "1st day";
}
},
FRIDAY{
public String getNumber(){
return "5th day";
}
};
public abstract String getNumber();
}
public class EnumTest {
public static void main(String[] args){
System.out.println(Day.MONDAY.getNumber());
System.out.println(Day.FRIDAY.getNumber());
}
}
输出
1st day
5th day
使用 values() 遍历枚举
我们可以使用 EnumType.values() 方法来循环遍历所有的枚举常量。
Java
enum Color{
RED, GREEN, BLUE;
}
public class Test{
public static void main(String[] args){
for (Color c : Color.values()){
System.out.println(c);
}
}
}
输出
RED
GREEN
BLUE
枚举与 EnumSet(特定范围遍历)
EnumSet.range() 允许我们在特定的枚举常量范围内进行迭代。
Java
import java.util.EnumSet;
public class EnumSetExample{
enum Day{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}
public static void main(String[] args){
EnumSet workDays = EnumSet.range(Day.TUESDAY, Day.FRIDAY);
for (Day d : workDays){
System.out.println(d);
}
}
}
输出
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
创建包含枚举成员的类
我们可以将枚举与普通的类结合使用,从而更好地组织我们的程序逻辑。