类的对象只有有限个 确定的 如
星期:星期一、星期二…..
性别:男、女
季节:春
支付方式:现金、支付宝…
订单状态:未付款、已付款、已发货、已取消…
当需要定义一组常量时,强烈建议使用枚举类
- 自定义枚举类
- 使用关键字enum定义枚举类
- enum关键字定义的枚举类顶级父类不是Object
- enum关键字枚举类顶级父类 class java.lang.Enum
- 枚举类可以实现接口
一、自定义枚举类
/**
* @author:LYY 创建时间:2022/5/4
* jkd5.0之前
* 自定义枚举类
*/
public class Season {
// 1. 属性需要声明为私有不可变的
private final String name;
private final String doc;
// 2. 私有化构造器
private Season(String name,String doc) {
this.name = name;
this.doc = doc;
}
// 3. 提供枚举类的多个对象 对象为静态不可变的
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 getName() {
return name;
}
public String getDoc() {
return doc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", doc='" + doc + '\'' +
'}';
}
}
class SeasonTest{
public static void main(String[] args) {
System.out.println("Season.SPRING = " + Season.SPRING);
}
}
二、使用enum关键字定义枚举类
/**
* @author:LYY
* 创建时间:2022/5/4
* 枚举类也可以实现接口
* 重写接口方法
* enum关键字定义的枚举类父类不是Object
*/
enum Season{
// 一定要将枚举对象放在最上方
SPRING("春天", "春暖花开"),
SUMMER("夏天", "烈日炎炎");
// 属性继续保持私有不可变修饰符
private final String name;
private final String doc;
// 私有构造器
private Season(String name, String doc){
this.name = name;
this.doc = doc;
}
}
三、枚举类常用方法
/**
* @author:LYY 创建时间:2022/5/4
*/
public class JavaTest {
public static void main(String[] args) {
// toString 打印当前枚举对象的常量名称
System.out.println("Season.SPRING.toString() = " + Season.SPRING.toString());
// values 返回当前枚举类的对象(常量)
Season[] values = Season.values();
for (int i = 0; i < values.length; i++) {
System.out.println("values = " + values[i]);
}
// 传递枚举常量名称 返回与名称匹配的枚举常量
Season summer = Season.valueOf("SUMMER");
System.out.println("summer = " + summer);
}
}