「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。
枚举类型的定义
[修饰符] enum 枚举类型名 { [public static final]枚举成员; //只能写在第一行 其他成员; [private]构造方法 方法 }
- 修饰符可以是public、private、internal
- 枚举类型名有两层含义:一是作为枚举名使用;二是表示枚举成员的数据类型。枚举成员也称为枚举实例或枚举对象。
- 枚举默认继承自java.lang.Enum类。
- 创建枚举对象不能使用new( )运算符,而应直接将枚举成员赋值给枚举对象。
枚举类型的方法
- 每个枚举类型的成员都可以看作是Enum类的实例,这些枚举成员默认被final public static修饰。
- 访问枚举类型的成员 枚举名.枚举成员
枚举名.valueOf( 参数)
- 因为枚举也是一种类,所以它具有与其他类几乎相同的特性,因此可以定义枚举的属性、构造方法以及方法。
枚举类常用方法
【例】定义一个枚举类型,然后输出枚举成员的名称和对应的序号。
enum Direction
{ EAST,SOUTH,WEST,NORTH }
public class EnumDemo{
public static void main(String[] args)
{
Direction dir=Direction.EAST;
System.out.print(dir);
for(Direction d:Direction.values())
System.out.println("序号:"+d.ordinal()+" 的值为"+d.name());
}
}
EAST
序号:0 的值为EAST
序号:1 的值为SOUTH
序号:2 的值为WEST
序号:3 的值为NORTH
枚举在switch中的应用
- 枚举类型有一个特别实用的特性,它可以在switch语句中使用。
- java.time.DayOfWeek是一个枚举类型,其中包括一周的7天,分别为MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY和SUNDAY,序号从0到6。
- EnumSwitch.java程序在switch结构中使用DayOfWeek枚举。
【例】 java.time.DayOfWeek是一个枚举类,一周7天,序号分别是0-6
import java.time.DayOfWeek;
public class EnumSwitch {
public static void describe (DayOfWeek day) {
switch (day) {
case MONDAY:
System.out.println("Mondays are bad.");
break;
case FRIDAY:
System.out.println("Fridays are better.");
break;
case SATURDAY:
case SUNDAY:
System.out.println("Weekends are best.");
break;
default:
System.out.println("Midweek days are so-so.");
break;
}
}
public static void main(String[] args) {
DayOfWeek firstDay = DayOfWeek.MONDAY;
describe (firstDay);
DayOfWeek thirdDay = DayOfWeek.WEDNESDAY;
describe (thirdDay);
DayOfWeek seventhDay = DayOfWeek.SUNDAY;
describe(seventhDay);
}
}
Mondays are bad.
Midweek days are so-so.
Weekends are best.
枚举类的构造方法
枚举的构造方法只是在构造枚举实例值时被调用。每一个枚举实例值都是枚举的一个对象,因此创建每个枚举实例时都需要调用该构造方法。
【例】 定义color枚举,包含四种颜色,声明两个private成员变量(name颜色名字、index索引)
package com;
public enum Color {
RED("红色", 1), GREEN("绿色", 2), WHITE("白色", 3), YELLOW("黄色", 4);
private String name;
private int index;
private Color(String name, int index) {
this.name = name;
this.index = index;
}
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
@Override
public String toString() {
return this.name + "_" + this.index;
}
public static void main (String[] args) {
Color c = Color.RED; // 自动调用构造方法
System.out.println(c.toString()); // 输出:1-红色
}
}
}