Java 枚举详解:从基础到高级应用

在 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

创建包含枚举成员的类

我们可以将枚举与普通的类结合使用,从而更好地组织我们的程序逻辑。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/29926.html
点赞
0.00 平均评分 (0% 分数) - 0