一、新建枚举enum
枚举类中自定义的名称是类对象名称,可以通过类名.对象名来获取对象
public class SeasonTest {
@Test
public void test() {
Season spring = Season.SPRING;
System.out.println(spring); //SPRING
System.out.println(spring.toString()); //SPRING
}
}
enum Season {
//自定义的枚举类对象名,是静态的,可以通过类名.对象名来获取对象
SPRING("春天", "春风盎然"),
SUNNER("夏天", "夏天很热"),
AUTUMN("秋天", "秋高气爽"),
WINTER("冬天", "东临碣石");
//枚举类的属性和构造方法都是private,确保枚举对象是final,而且获取方法固定
private final String seasonName;
private final String seasonDesc;
private Season(String name, String desc) {
seasonName = name;
seasonDesc = desc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
二、枚举类的常用方法
1、toString()
printfln()方法打印时,会调用String.valueOf()将打印的内容转化成字符串,而String.valueOf()方法会调用Object类的toString()方法,所以如果要打印的内容不是字符串或者基本数据类型,那么会打印出类的名称,而String等重写了toString(),所以直接打印内容,所以在枚举类中重写toString()
//重写toString()
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
System.out.println(spring); //Season{seasonName='春天', seasonDesc='春风盎然'}
System.out.println(spring.toString()); //Season{seasonName='春天', seasonDesc='春风盎然'}
2、values()
枚举类.values()是静态方法,获取所有枚举类对象
@Test
public void test() {
Season[] values = Season.values();
for (int i = 0; i < values.length; i++) {
//注意可以通过对象.属性名直接获取,因为对象的属性名与构造方法中的形参一致
System.out.println(values[i].name());
//输出
/*SPRING
SUNNER
AUTUMN
WINTER*/
}
}
3、valueOf()
枚举类.valueOf("")是静态方法,返回参数名对应的对象
@Test
public void test() {
Season winter = Season.valueOf("WINTER");
System.out.println(winter); //Season{seasonName='冬天', seasonDesc='东临碣石'}
System.out.println(winter.getSeasonDesc()); //当然也可以通过get()方法获取属性,打印东临碣石
}
三、枚举类继承接口
实现各个对象分别重写接口中的方法
public class SeasonTest {
@Test
public void test() {
Season[] values = Season.values();
for (int i = 0; i < values.length; i++) {
values[i].show();
/*输出
* 春天里
宁静的夏天
缓缓飘落的枫叶像思念
冬天里的一把火*/
}
}
}
enum Season implements interf {
//匿名类实现各个对象分别重写show()
SPRING("春天", "春风盎然") {
@Override
public void show() {
System.out.println("春天里");
}
},
SUNNER("夏天", "夏天很热") {
@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,而且获取方法固定
private final String seasonName;
private final String seasonDesc;
private Season(String name, String desc) {
seasonName = name;
seasonDesc = desc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//重写toString()
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
interface interf {
void show();
当然也可以在枚举类中重写show()
@Override
public void show() {
System.out.println(this.seasonName);
}