枚举类:
一:如何自定义枚举类:
1、提供类的属性,声明为private final。
2、声明为final的属性,在构造器中初始化。
3、提供公共的方法来调用属性。
4、创建枚举类的对象:将类的对象声明为public static final
public class TestSeason { public static void main(String[] args) { Season spring = Season.SPRING; System.out.println(spring); } } class Season { private final String seasonName; private final String seasonDesc; private Season(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 "Season{" + "seasonName='" + seasonName + '\'' + ", seasonDesc='" + seasonDesc + '\'' + '}'; } public static final Season SPRING = new Season("Spring", "春暖花开"); public static final Season SUMMER = new Season("SUMMER", "夏日炎炎"); public static final Season AUTUMN = new Season("AUTUMN", "秋高气爽"); public static final Season WINTER = new Season("WINTER", "白雪皑皑"); }
二:使用enum关键字定义枚举类
public class TestEnum {
public static void main(String[] args) {
Season1 spring = Season1.SPRING;
Season1 summer = Season1.SUMMER;
Season1[] seasons = Season1.values();
for (int i = 0; i < seasons.length; i++) {
System.out.println(seasons[i]);
}
}
}
enum Season1 {
SPRING("Spring", "春暖花开"),
SUMMER("Summer", "夏日炎炎"),
AUTUMN("Autumn", "秋高气爽"),
WINTER("Winter", "白雪皑皑");
private String seasonName;
private String seasonDesc;
private Season1(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 "Season1{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
>常用的方法:
values()
valueof(String name):要求传入的形参name是枚举类对象的名字。否则,报java.lang.IllegalArgumentException异常Season1[] seasons = Season1.values(); for (int i = 0; i < seasons.length; i++) { System.out.println(seasons[i]); }
String str = "SPRING"; Season1 season = Season1.valueOf(str); System.out.println(season);
三、如何用枚举类实现接口:
可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同。(相当于让每个对象重写抽象方法。)
interface Info {
void show();
}
enum Season1 implements Info {
SPRING("Spring", "春暖花开") {
public void show() {
System.out.println("春天在哪里?");
}
},
SUMMER("Summer", "夏日炎炎") {
public void show() {
System.out.println("夏日炎炎最好眠!");
}
},
AUTUMN("Autumn", "秋高气爽") {
public void show() {
System.out.println("秋高气爽,适合旅行!");
}
},
WINTER("Winter", "白雪皑皑") {
public void show() {
System.out.println("冬雪皑皑,适合冬眠!");
}
};