Java枚举类型enum是一种特殊的类,它可以用来定义一组常量。它可以被用来表示一些有限的、固定的值,例如性别、星期几、月份等。使用枚举可以避免使用整数常量,这样可以提高代码的可读性和可维护性。
Java中的enum是一个关键字,它用于声明一个新的枚举类型。在声明enum时,必须提供一个名字,并在大括号中列出所有要包含的常量。例如:
public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
上面代码声明了一个名为Day的enum,它包含7个常量SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY和SATURDAY。
在使用enum时,我们可以通过访问其中的常量来获得相应的值。例如:
Day day = Day.MONDAY; // 赋值MONDAY常量 System.out.println(day); // 输出MONDAY
此外,我们还可以使用switch语句来根据不同情况执行不同功能。例如:
switch (day) { case SUNDAY: // 如果day是SUNDAY System.out.println("Sunday"); // 打印Sunday break; // 结束switch语句 case MONDAY: // 如果day是MONDAY System.out.println("Monday"); // 打印Monday break; // 结束switch语句 default: // 如果day不是SUNDAY也不是MONDAY System.out.println("Other day"); // 打印Other day }
此外,我们还可以使用for-each循环遍历所有的enum常量。例如:
for (Day d : Day.values()) { // 遍历Day中所有的常量 System.out.println(d); }
枚举类型创建常量的有序列表作为类型。它以特定顺序指定常量。
在枚举类型中定义的常量是该枚举类型的实例。
使用关键字enum使用以下语法定义枚举类型:
<access-modifier> enum <enum-type-name> { // List of comma separated names of enum constants }
<access-modifiers>与类的访问修饰符相同:public,private,protected或package-level。
<enum-type-name>是有效的Java标识符。
枚举类型的主体放在大括号中,名称后面。主体可以有逗号分隔的常量和其他元素的列表,例如实例变量,方法等。
大多数时候,枚举体只包括常量。
下面的代码声明了一个名为Gender的枚举类型,它声明了两个常量:MALE和FEMALE:
public enum Gender { MALE, FEMALE; // The semi-colon is optional }
将枚举常量命名为大写是一种惯例。
以下代码声明了一个名为Level的公共枚举类型,它具有四个枚举常量:LOW,MEDIUM,HIGH和URGENT。
public enum Level { LOW, MEDIUM, HIGH, URGENT; }
可以从应用程序中的任何位置访问公共枚举类型。
公共枚举类型保留在具有枚举类型名称的文件中。级别枚举将保存在名为Level.java的文件中。
我们需要在包中放置枚举类型,我们可以使用 import
语句导入枚举类型。
我们可以声明枚举类型的变量,就像声明类类型的变量一样。
以下代码声明Level枚举类型的errorLevel变量。
Level errorLevel;
您可以为枚举类型变量分配null,如下所示:
Level defectLevel = null;
您可以在switch语句中使用枚举类型。
当switch表达式是枚举类型时,所有case标签必须是同一枚举类型的不合格枚举常量。
enum Direction { East, South, West, North } public class Main { public static void main(String args[]) { Direction dir = Direction.South; switch (dir) { case South: System.out.println("south"); break; case East: System.out.println("East"); break; case West: System.out.println("West"); break; case North: System.out.println("North."); break; } } }
上面的代码生成以下结果。
我们可以在类,接口或另一个枚举类型中有一个嵌套的枚举类型声明。
嵌套枚举类型是隐式静态的。因为枚举类型总是静态的,所以我们不能在方法体内声明一个局部枚举类型。
对于嵌套枚举类型,我们可以使用任何访问修饰符(public,private,protected或package)级别。
以下代码显示了如何在Person类中声明名为Gender的嵌套公共枚举类型。
class Person { public enum Gender { MALE, FEMALE } } public class Main { public static void main(String[] args) { Person.Gender m = Person.Gender.MALE; Person.Gender f = Person.Gender.FEMALE; System.out.println(m); System.out.println(f); } }
Person.Gender枚举类型可以从应用程序中的任何位置访问,因为它已被声明为public。
我们也可以通过使用静态导入导入枚举常量来使用枚举常量的简单名称。
import static com..enums.Person.Gender.*;
枚举类型可以实现接口。实现接口的枚举类型的规则与实现接口的类的规则相同。
下面的代码演示了如何让enum类型实现一个接口。interface Command { void execute(); } enum Level implements Command { LOW { public void execute() { System.out.println("Low..."); } }, HIGH { public void execute() { System.out.println("HIGH..."); } }; public abstract void execute(); } public class Main { public static void main(String... args) { for (Command cmd : Level.values()) { cmd.execute(); } } }
上面的代码生成以下结果。
Java面向对象设计 -Java枚举主体将主体添加到枚举常量我们可以为每个枚举常量添加一个不同的体。身体可以有字段和方法。枚举常量...
Java面向对象设计 -Java接口方法方法声明您可以在接口中声明三种类型的方法:抽象方法静态方法默认方法在Java 8之前,您只能在接...
Java面向对象的设计 -Java异常使用访问线程的堆栈以下代码显示了如何获取线程的堆栈帧。Throwable对象在创建线程的点处捕获线程...
Java面向对象设计 -Java异常处理异常是在没有定义正常执行路径时在Java程序的执行期间可能出现的条件。Java通过将执行操作的代码...
Java数据类型教程 -Java字符数据类型Character类的一个对象包装一个char值。字符类包含isLetter()和isDigit()方法来检查字符是否...