您好,登录后才能下订单哦!
枚举(Enum)是Java 5引入的一种特殊的数据类型,它允许我们定义一组固定的常量。枚举类在Java中是一种特殊的类,它可以包含字段、方法、构造函数等,但它的实例是预定义的、有限的。
枚举类的主要用途是表示一组固定的常量,例如星期、月份、颜色等。使用枚举类可以提高代码的可读性和安全性,避免使用魔法数字或字符串。
枚举类的定义与普通类的定义类似,但使用enum
关键字代替class
关键字。枚举类的实例是预定义的,通常使用大写字母表示。
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
在上面的例子中,Day
是一个枚举类,它包含七个预定义的实例:MONDAY
、TUESDAY
、WEDNESDAY
、THURSDAY
、FRIDAY
、SATURDAY
和SUNDAY
。
枚举类的实例可以直接使用,例如:
Day today = Day.MONDAY;
System.out.println("Today is " + today);
输出结果为:
Today is MONDAY
枚举类可以包含字段和方法,例如:
public enum Day {
MONDAY("星期一"),
TUESDAY("星期二"),
WEDNESDAY("星期三"),
THURSDAY("星期四"),
FRIDAY("星期五"),
SATURDAY("星期六"),
SUNDAY("星期日");
private final String chineseName;
Day(String chineseName) {
this.chineseName = chineseName;
}
public String getChineseName() {
return chineseName;
}
}
在上面的例子中,Day
枚举类包含一个字段chineseName
和一个方法getChineseName()
。每个枚举实例都有一个对应的中文名称。
使用示例:
Day today = Day.MONDAY;
System.out.println("Today is " + today.getChineseName());
输出结果为:
Today is 星期一
枚举类可以包含构造函数,但构造函数的访问修饰符必须是private
或默认的(即不写访问修饰符)。枚举类的构造函数在枚举实例创建时自动调用。
public enum Day {
MONDAY("星期一", 1),
TUESDAY("星期二", 2),
WEDNESDAY("星期三", 3),
THURSDAY("星期四", 4),
FRIDAY("星期五", 5),
SATURDAY("星期六", 6),
SUNDAY("星期日", 7);
private final String chineseName;
private final int dayNumber;
Day(String chineseName, int dayNumber) {
this.chineseName = chineseName;
this.dayNumber = dayNumber;
}
public String getChineseName() {
return chineseName;
}
public int getDayNumber() {
return dayNumber;
}
}
在上面的例子中,Day
枚举类的构造函数接受两个参数:chineseName
和dayNumber
。
使用示例:
Day today = Day.MONDAY;
System.out.println("Today is " + today.getChineseName() + ", day number is " + today.getDayNumber());
输出结果为:
Today is 星期一, day number is 1
枚举类可以包含静态方法,例如:
public enum Day {
MONDAY("星期一", 1),
TUESDAY("星期二", 2),
WEDNESDAY("星期三", 3),
THURSDAY("星期四", 4),
FRIDAY("星期五", 5),
SATURDAY("星期六", 6),
SUNDAY("星期日", 7);
private final String chineseName;
private final int dayNumber;
Day(String chineseName, int dayNumber) {
this.chineseName = chineseName;
this.dayNumber = dayNumber;
}
public String getChineseName() {
return chineseName;
}
public int getDayNumber() {
return dayNumber;
}
public static Day getDayByNumber(int dayNumber) {
for (Day day : Day.values()) {
if (day.getDayNumber() == dayNumber) {
return day;
}
}
throw new IllegalArgumentException("Invalid day number: " + dayNumber);
}
}
在上面的例子中,Day
枚举类包含一个静态方法getDayByNumber()
,它根据dayNumber
返回对应的Day
实例。
使用示例:
Day day = Day.getDayByNumber(3);
System.out.println("Day is " + day.getChineseName());
输出结果为:
Day is 星期三
values()
和valueOf()
方法枚举类自动提供了两个静态方法:values()
和valueOf()
。
values()
方法返回枚举类的所有实例数组。valueOf()
方法根据名称返回对应的枚举实例。使用示例:
Day[] days = Day.values();
for (Day day : days) {
System.out.println(day);
}
Day day = Day.valueOf("MONDAY");
System.out.println("Day is " + day.getChineseName());
输出结果为:
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
Day is 星期一
switch
语句枚举类可以与switch
语句一起使用,例如:
Day today = Day.MONDAY;
switch (today) {
case MONDAY:
System.out.println("Today is Monday");
break;
case TUESDAY:
System.out.println("Today is Tuesday");
break;
case WEDNESDAY:
System.out.println("Today is Wednesday");
break;
case THURSDAY:
System.out.println("Today is Thursday");
break;
case FRIDAY:
System.out.println("Today is Friday");
break;
case SATURDAY:
System.out.println("Today is Saturday");
break;
case SUNDAY:
System.out.println("Today is Sunday");
break;
default:
System.out.println("Invalid day");
}
输出结果为:
Today is Monday
compareTo()
方法枚举类实现了Comparable
接口,因此可以使用compareTo()
方法比较两个枚举实例的顺序。
Day day1 = Day.MONDAY;
Day day2 = Day.WEDNESDAY;
int result = day1.compareTo(day2);
if (result < 0) {
System.out.println(day1 + " comes before " + day2);
} else if (result > 0) {
System.out.println(day1 + " comes after " + day2);
} else {
System.out.println(day1 + " is the same as " + day2);
}
输出结果为:
MONDAY comes before WEDNESDAY
ordinal()
方法枚举类的每个实例都有一个ordinal()
方法,它返回该实例在枚举类中的位置(从0开始)。
Day day = Day.WEDNESDAY;
System.out.println(day + " has ordinal " + day.ordinal());
输出结果为:
WEDNESDAY has ordinal 2
name()
方法枚举类的每个实例都有一个name()
方法,它返回该实例的名称。
Day day = Day.WEDNESDAY;
System.out.println(day + " has name " + day.name());
输出结果为:
WEDNESDAY has name WEDNESDAY
toString()
方法枚举类的每个实例都有一个toString()
方法,它返回该实例的名称。默认情况下,toString()
方法与name()
方法的行为相同,但可以重写toString()
方法以返回自定义的字符串。
public enum Day {
MONDAY("星期一"),
TUESDAY("星期二"),
WEDNESDAY("星期三"),
THURSDAY("星期四"),
FRIDAY("星期五"),
SATURDAY("星期六"),
SUNDAY("星期日");
private final String chineseName;
Day(String chineseName) {
this.chineseName = chineseName;
}
@Override
public String toString() {
return chineseName;
}
}
使用示例:
Day day = Day.WEDNESDAY;
System.out.println(day);
输出结果为:
星期三
枚举类适用于以下场景:
枚举类是Java中一种特殊的类,它允许我们定义一组固定的常量。枚举类可以提高代码的可读性和安全性,避免使用魔法数字或字符串。枚举类可以包含字段、方法、构造函数等,并且可以与switch
语句、compareTo()
方法等一起使用。枚举类适用于表示一组固定的常量,并且可以为常量添加额外的字段或方法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。