在本教程中,我们将学习Java中的枚举。我们将在示例的帮助下学习创建和使用枚举和枚举类。
在Java中,枚举是一种具有固定的可能值集的类型。我们使用enum关键字来声明枚举。例如,
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
在这里,我们创建了一个名为Size的枚举。
花括号内的值称为枚举值(常量)。这些是枚举类型可以保留的唯一值。
注意:枚举常量通常以大写形式表示。
让我们举一个简单的实例。
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;
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("我点了一个小号比萨饼。"); break; case MEDIUM: System.out.println("我点了一个中号的披萨。"); break; default: System.out.println("我不知道该点哪一种。"); break; } } } class Main { public static void main(String[] args) { Test t1 = new Test(Size.MEDIUM); t1.orderPizza(); } }
输出结果
我点了一个中号的披萨。
在上面的程序中,我们创建了一个枚举类型Size。然后,我们声明Size类型的变量pizzaSize。
变量pizzaSize只能分配4个值(SMALL,MEDIUM,LARGE,EXTRALARGE)。
变量pizzaSize分配了MEDIUM常数。 基于此,将打印switch case语句的一种情况。
在Java中,枚举类型被认为是类的一种特殊类型。它是在Java 5发行版中引入的。
枚举类可以像常规类一样包含方法和字段。
enum Size { constant1, constant2, …, constantN; //方法和字段 }
枚举常量始终默认为public static final。
当创建enum类时,编译器还将创建每个enum常量的实例(对象)。
enum Size{ SMALL, MEDIUM, LARGE, EXTRALARGE; public String getSize() { //这将引用对象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) { //使用对象SMALL调用方法getSize() System.out.println("披萨的大小是 " + Size.SMALL.getSize()); } }
输出结果
披萨的大小是 small
在上面的示例中,我们创建了一个枚举类 Size。它有四个常数 SMALL,MEDIUM,LARGE和EXTRALARGE。
由于Size是枚举类,因此编译器会自动为每个枚举常量创建实例。
在main()方法内部,我们已使用实例SMALL调用getSize()方法。
像常规类一样,枚举类也可以包含构造函数。要了解更多信息,请访问Java枚举构造函数。
枚举类中有一些预定义的方法可以随时使用。
ordinal()方法返回枚举常量的位置。例如,
ordinal(SMALL) //返回 0
compareTo()方法根据序数值比较枚举常量。例如,
Size.SMALL.compareTo(Size.MEDIUM) //返回 ordinal(SMALL) - ordinal(MEDIUM)
toString()方法返回枚举常量的字符串表示形式。例如,
SMALL.toString() //返回 "SMALL"
name()方法以字符串形式返回枚举常量的定义名称。name()方法返回的值为final。例如,
name(SMALL) //返回 "SMALL"
valueOf()方法采用字符串,并返回具有相同字符串名称的枚举常量。例如,
Size.valueOf("SMALL") //返回常量 SMALL
values()方法返回包含所有枚举常量的枚举类型数组。例如,
Size[] enumArray = Size.value();
在Java中,引入了enum来代替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类型的变量(如上述示例中所示),则可以确保该变量将容纳四个值之一。如果我们尝试传递这四个值以外的值,则编译器将抛出错误。