Java 枚举类
作者:互联网
参考:https://www.bilibili.com/video/BV1Kb411W75N
0x01 枚举类是什么
枚举类是一种类,它的特点是对象数量有限且确定(对象是写死的)。
当我们需要定义一组常量时(例如四季、周一到周日、12个月等),一般会使用枚举类。
0x02 如何定义枚举类
在jdk5.0之后,提供了enum关键字来定义枚举类,用enum关键字定义的枚举类默认继承于 java.lang.Enum 类
// 使用enum关键字定义枚举类
enum Season1 {
// 1. 提供当前枚举类的对象,多个对象之间用“,”隔开,末尾对象用“;”结束
SPRING("春天", "春暖花开"),
SUMMER("夏天", "夏日炎炎"),
AUTUMN("秋天", "秋高气爽"),
WINTER("冬天", "冰天雪地");
// 2. 声明Season对象的属性:用 private final 修饰
private final String seasonName;
private final String seasonDesc;
// 3. 私有化类的构造器,并给对象属性赋值
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
// 4. 其它诉求:获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
0x03 Enum类中的常用方法
Enum类中的常用方法有3个:
- values(): 返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
- valueOf(String str): 可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
- toString(): 返回当前枚举类对象常量的名称。
/**
* 使用enum关键字定义枚举类
* 说明:定义的枚举类默认继承于 java.lang.Enum 类
*/
public class SeasonTest1 {
public static void main(String[] args) {
Season1 summer = Season1.SUMMER;
// toString():
System.out.println(summer.toString());
System.out.println("********************************");
// values():
Season1[] values = Season1.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
}
// valueOf(String ovjName): 返回枚举类中对象名是objName的对象。
// 如果没有objName的枚举类对象,则抛异常:IllegalArgumentException
Season1 winter = Season1.valueOf("WINTER");
// Season1 winter = Season1.valueOf("WINTER1");
System.out.println(winter);
}
}
// 使用enum关键字定义枚举类
enum Season1 {
// 1. 提供当前枚举类的对象,多个对象之间用“,”隔开,末尾对象用“;”结束
SPRING("春天", "春暖花开"),
SUMMER("夏天", "夏日炎炎"),
AUTUMN("秋天", "秋高气爽"),
WINTER("冬天", "冰天雪地");
// 2. 声明Season对象的属性:用 private final 修饰
private final String seasonName;
private final String seasonDesc;
// 3. 私有化类的构造器,并给对象属性赋值
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
// 4. 其它诉求:获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
0x04 使用枚举类来实现接口
1、直接在enum类中重写接口中声明的抽象方法,这也是实现接口最惯用的方法,但有个问题是这样实现接口的话,枚举类中的不同对象调用的是同一个方法,调用的结果也都是相同的,如果我想让每个对象调用不同的方法,获得不同的结果,应该怎么办呢?
2、让枚举类中的每个对象分别实现接口中的抽象方法。
/**
* 使用enum关键字定义枚举类
* 说明:定义的枚举类默认继承于 java.lang.Enum 类
*/
public class SeasonTest1 {
public static void main(String[] args) {
Season1 summer = Season1.SUMMER;
// 遍历Season1枚举类中每个对象的show方法
Season1[] values = Season1.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
values[i].show();
}
// 调用WINTER的show方法
winter.show();
}
}
interface Info {
void show();
}
// 使用enum关键字定义枚举类
enum Season1 implements Info{
// 1. 提供当前枚举类的对象,多个对象之间用“,”隔开,末尾对象用“;”结束
SPRING("春天", "春暖花开") {
@Override
public void show() {
System.out.println("春天在哪里");
}
},
SUMMER("夏天", "夏日炎炎") {
@Override
public void show() {
System.out.println("宁夏");
}
},
AUTUMN("秋天", "秋高气爽") {
@Override
public void show() {
System.out.println("秋天不回来");
}
},
WINTER("冬天", "冰天雪地") {
@Override
public void show() {
System.out.println("大约在冬季");
}
};
// 2. 声明Season对象的属性:用 private final 修饰
private final String seasonName;
private final String seasonDesc;
// 3. 私有化类的构造器,并给对象属性赋值
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
// 4. 其它诉求:获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
标签:Java,String,对象,seasonDesc,seasonName,枚举,Season1 来源: https://www.cnblogs.com/rnss/p/15865442.html