精通 Java 枚举:枚举类与枚举常量完全指南
Java 枚举
本教程学习 Java 枚举,通过示例掌握枚举与枚举类的创建与使用。
Java 中枚举(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 语句使用枚举
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 对应分支。
Java 枚举类
Java 中枚举类型被视为特殊类,Java 5 引入。
枚举类可像普通类一样包含方法和字段。
enum Size { constant1, constant2, …, constantN; // 方法和字段 }
创建枚举类时,编译器为每个枚举常量自动创建实例(对象)。且所有枚举常量默认均为 public static final。
示例 3:Java 枚举类
enum Size{ SMALL, MEDIUM, LARGE, EXTRALARGE; public String getSize() { // this 指代对象 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) { // 调用 getSize() // 使用 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 Enum ordinal()
ordinal() 返回枚举常量的位置。例如:
ordinal(SMALL) // 返回 0
2. Enum compareTo()
compareTo() 基于序数比较枚举常量。例如:
Size.SMALL.compareTo(Size.MEDIUM) // 返回 ordinal(SMALL) - ordinal(MEDIUM)
3. Enum toString()
toString() 返回枚举常量的字符串表示。例如:
SMALL.toString() // 返回 "SMALL"
4. Enum name()
name() 返回枚举常量定义名的字符串形式,返回值为 final。例如:
name(SMALL) // 返回 "SMALL"
5. Java Enum valueOf()
valueOf() 接受字符串,返回同名枚举常量。例如:
Size.valueOf("SMALL") // 返回常量 SMALL.
6. Enum 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; }
问题在于打印常量时仅输出数字,不直观。
改用枚举:
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
代码更直观。
枚举还提供 编译期类型安全。
声明 Size 类型变量:
Size size;
保证变量仅持有四个值之一。尝试传入其他值,编译器报错。
java