枚举类
1、理解枚举类
- 类的对象只有有限个或者说确定个数
- 也可以理解为枚举类定义了一组常量
- 如果枚举类中只有一个对象,则可以作为单例模式的实现方式
2、定义枚举类
2.1、自定义枚举类(jdk5.0之前)
public class EnumTest {
public static void main(String[] args) {
Season season = Season.SPRING;
String seasonName = season.getSeasonName();
System.out.println(season);
System.out.println(seasonName);
}
}
//自定义枚举类
class Season{
private final String seasonName;
private final String seasonDesc;
public Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public static final Season SPRING = new Season("春天","春暖花开");
public static final Season SUMMER = new Season("夏天","夏日福利");
public static final Season AUTUMN = new Season("秋天","秋高气爽");
public static final Season WINTER = new Season("冬天","冰天雪地");
//返回某一属性值
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
分析:
- 自定义
Season
枚举类,并定义了四个枚举对象SPRING
SUMMER
AUTUMN
WINTER
- 可以为每个枚举对象附加相应的属性值,并且能够根据某个枚举对象获取对应的属性值(根据应用需要)
- 这里只需要理解就行(一般不使用这种)
2.2、enum关键字(jdk5.0之后)
package com.mtf.枚举;
public class EnumTest01 {
public static void main(String[] args) {
Season1 season1 = Season1.SPRING;
System.out.println(season1);
//获取定义的枚举类的父类:输出可以看出父类为Enum类
System.out.println(Season1.class.getSuperclass());
}
}
//使用enum关键字定义枚举类
enum Season1{
SPRING("春天","春暖花开"),
SUMMER("夏天","夏日福利"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","冰天雪地");
private final String seasonName;
private final String seasonDesc;
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//返回某一属性值
public String getSeason1Name() {
return seasonName;
}
public String getSeason1Desc() {
return seasonDesc;
}
}
3、Enum类中常用方法
package com.mtf.枚举;
/*
* Enum类的主要方法
*
* */
public class EnumMethod {
public static void main(String[] args) {
Season1 season1 = Season1.SPRING;
String name = season1.name();
System.out.println(season1.toString());
//values()
Season1[] values = Season1.values();
//SPRING,SUMMER,AUTUMN,WINTER
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
}
//valueOf(String ObjectName)
Season1 spring = Season1.valueOf("SPRING");
//java.lang.IllegalArgumentException:枚举类中没有相应的枚举对象会报错
Season1 spring1 = Season1.valueOf("SPRING1");
System.out.println(spring1);
}
}
分析:
values()
方法:返回的是枚举类的所有枚举对象toString()
方法:返回的是枚举名称(一个枚举对象的名称)valueOf(Object obj)
方法:根据相应的枚举名称返回对应的枚举对象
4、枚举类与接口的运用
package com.mtf.枚举;
/*
* 使用enum关键字定义的枚举类实现接口
* 情况一:在枚举类中定义一个公共方法
* 情况二:给每个具体的对象来定义同一个方法
* */
public class EnumInterface {
public static void main(String[] args) {
Season2 spring = Season2.SPRING;
spring.show();
}
}
interface Info{
void show();
}
//使用enum关键字定义枚举类
enum Season2 implements Info{
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("大约在冬季");
}
};
private final String seasonName;
private final String seasonDesc;
private Season2(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//返回某一属性值
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season2{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
/* @Override
public void show() {
System.out.println("这是一个季节!");
}*/
}
分析:
- 上述代码实现了枚举类实现接口并重写了接口中的方法(用到了匿名内部类)