在 Java 中,枚举(enum,是 enumeration 的缩写)是一种具有固定常量集合的类型。我们使用 enum
关键字来声明枚举。例如,
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
在这里,我们创建了一个名为 Size 的枚举。它包含固定的值 SMALL、MEDIUM、LARGE 和 EXTRALARGE。
花括号内的这些值称为枚举常量(值)。
注意:枚举常量通常用大写字母表示。
示例 1:Java 枚举
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
class Main {
public static void main(String[] args) {
System.out.println(Size.SMALL);
System.out.println(Size.MEDIUM);
}
}
输出
SMALL MEDIUM
从上面的示例可以看出,我们使用枚举名称来访问常量值。
此外,我们还可以创建枚举类型的变量。例如,
Size pizzaSize;
在这里,pizzaSize 是 Size 类型的变量。它只能被赋予 4 个值。
pizzaSize = Size.SMALL;
pizzaSize = Size.MEDIUM;
pizzaSize = Size.LARGE;
pizzaSize = Size.EXTRALARGE;
示例 2:带 switch 语句的 Java 枚举
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
class Test {
Size pizzaSize;
public Test(Size pizzaSize) {
this.pizzaSize = pizzaSize;
}
public void orderPizza() {
switch(pizzaSize) {
case SMALL:
System.out.println("I ordered a small size pizza.");
break;
case MEDIUM:
System.out.println("I ordered a medium size pizza.");
break;
default:
System.out.println("I don't know which one to order.");
break;
}
}
}
class Main {
public static void main(String[] args) {
Test t1 = new Test(Size.MEDIUM);
t1.orderPizza();
}
}
输出
I ordered a medium size pizza.
在上面的程序中,我们创建了一个 Size 枚举类型。然后我们声明了一个 Size 类型的变量 pizzaSize。
在这里,变量 pizzaSize 只能被赋予 4 个值(SMALL、MEDIUM、LARGE、EXTRALARGE)。
请注意以下语句:
Test t1 = new Test(Size.MEDIUM);
它将调用 Test 类中的 Test()
构造函数。现在,变量 pizzaSize 被赋予了 MEDIUM 常量。
根据值,将执行 switch case 语句的一个 case。
Java 中的枚举类
在 Java 中,枚举类型被认为是类的一种特殊类型。它是在 Java 5 发布时引入的。
枚举类可以像普通类一样包含方法和字段。
enum Size {
constant1, constant2, …, constantN;
// methods and fields
}
当我们创建枚举类时,编译器将为每个枚举常量创建实例(对象)。此外,所有枚举常量默认都是 public static final
。
示例 3:Java 枚举类
enum Size{
SMALL, MEDIUM, LARGE, EXTRALARGE;
public String getSize() {
// this will refer to the object SMALL
switch(this) {
case SMALL:
return "small";
case MEDIUM:
return "medium";
case LARGE:
return "large";
case EXTRALARGE:
return "extra large";
default:
return null;
}
}
public static void main(String[] args) {
// call getSize()
// using the object SMALL
System.out.println("The size of the pizza is " + Size.SMALL.getSize());
}
}
输出
The size of the pizza is small
在上面的示例中,我们创建了一个 Size 枚举类。它有四个常量 SMALL、MEDIUM、LARGE 和 EXTRALARGE。
由于 Size 是一个枚举类,编译器会自动为每个枚举常量创建实例。
在这里,在 main()
方法中,我们使用实例 SMALL 调用了 getSize()
方法。
注意:与普通类一样,枚举类也可以包含构造函数。要了解更多信息,请访问Java 枚举构造函数。
Java 枚举类的方法
枚举类中有一些预定义的方法可以立即使用。
1. Java 枚举 ordinal()
ordinal()
方法返回枚举常量的位置。例如,
ordinal(SMALL)
// returns 0
2. 枚举 compareTo()
compareTo()
方法根据其序数值比较枚举常量。例如,
Size.SMALL.compareTo(Size.MEDIUM)
// returns ordinal(SMALL) - ordinal(MEDIUM)
3. 枚举 toString()
toString()
方法返回枚举常量的字符串表示形式。例如,
SMALL.toString()
// returns "SMALL"
4. 枚举 name()
name()
方法以字符串形式返回枚举常量的定义名称。name()
方法的返回值是 final
的。例如,
name(SMALL)
// returns "SMALL"
5. Java 枚举 valueOf()
valueOf()
方法接受一个字符串并返回具有相同字符串名称的枚举常量。例如,
Size.valueOf("SMALL")
// returns constant SMALL.
6. 枚举 values()
values()
方法返回一个包含所有枚举常量的枚举类型数组。例如,
Size[] enumArray = Size.value();
为什么使用 Java 枚举?
在 Java 中,引入枚举是为了取代 int 常量的使用。
假设我们使用了一组 int
常量。
class Size {
public final static int SMALL = 1;
public final static int MEDIUM = 2;
public final static int LARGE = 3;
public final static int EXTRALARGE = 4;
}
这里,如果打印常量,就会出现问题。这是因为只打印了数字,这可能没有帮助。
因此,我们可以使用枚举而不是 int 常量。例如,
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
这使得我们的代码更具可读性。
此外,枚举提供了编译时类型安全。
如果我们声明一个 Size 类型的变量。例如,
Size size;
在这里,可以保证该变量将保存这四个值之一。现在,如果我们尝试传递这四个值以外的其他值,编译器将生成一个错误。
另请阅读