- 枚举类是类的对象只有有限个,确定的
- 如果枚举类中只有一个对象,则可作为单例模式的实现方式
使用enum关键字定义枚举类
enum类默认继承于java.lang.Enum类,已经重写了toString方法,输出对象的名字
public class SeasonTest {
public static void main(String[] args) {
Season summer = Season.SUMMER;
System.out.println(summer);
//values方法
Season[] values = Season.values();
for(int i=0;i<values.length;i++){
System.out.println(values[i]);
}
//valueOf
Season winter = Season.valueOf("WINTER");
System.out.println(winter);//WINTER
Season winter1 = Season.valueOf("WINTER1");//抛异常
System.out.println(winter1);
}
}
enum Season{
//1. 提供当前枚举类的对象,多个对象之间用”,“隔开,末尾用”;“结束
SPRING("春天","春暖花开"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","冰天雪地");
//2. 声明Season对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;
Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
}
Enum类常用方法
values() 方法
返回枚举类型的对象数组。 可以很方便地遍历所有的枚举值
public class SeasonTest {
public static void main(String[] args) {
Season summer = Season.SUMMER;
System.out.println(summer);
//values方法
Season[] values = Season.values();
for(int i=0;i<values.length;i++){
System.out.println(values[i]);
/*
输出
SUMMER
SPRING
SUMMER
AUTUMN
WINTER
*/
}
}
}
valueOf() 方法
valueOf(String objName) 返回枚举类中对象名是objName的对象。如果没有objName的枚举类对象,则抛异常:IllegalArgumentException
//valueOf
Season winter = Season.valueOf("WINTER");
System.out.println(winter);//WINTER
Season winter1 = Season.valueOf("WINTER1");//抛异常
System.out.println(winter1);
使用enum关键字定义的枚举类实现接口的情况
情况一: 原来实现接口的方式 重写方法
情况二: 让枚举类的对象分别实现接口中的抽象方法
package com.flora.java2;
/**
* @author flora
* @create 2020-10-18 17:25
*/
public class SeasonTest {
public static void main(String[] args) {
Season summer = Season.SUMMER;
System.out.println(summer);
//values方法
Season[] values = Season.values();
for(int i=0;i<values.length;i++){
System.out.println(values[i]);
}
//valueOf
Season winter = Season.valueOf("WINTER");
System.out.println(winter);//WINTER
Season.SPRING.show();//春天在哪里
}
}
interface Info{
void show();//抽象方法
}
enum Season 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;
Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
}