概念
当需要一组常量时,建议使用枚举类。即类的对象是有限个的、确定的
比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。
- 若枚举只有一个对象,则可以作为一种单例模式的实现方式
定义
1. 自定义枚举类
jdk5.0之前,需要自定义枚举类
枚举类中已经定义好了一组静态对象,直接使用类调用即可
public class test {
public static void main(String[] args) {
Season autumn = Season.AUTUMN;
System.out.println(autumn.getSeasonName());//秋天
}
}
//自定义枚举类
class Season{
//1.声明Season对象的属性:private final 修饰
private final String seasonName;
private final String seasonDesc;
//2.私有化类的构造器(防止外界调用,产生不确定个数的对象),并给对象属性赋值
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3.提供当前枚举类的一组对象:public static final修饰(需要不可变,直接用类调用)
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("冬天", "冬暖花开");
//4.获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//5.提供toString方法
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
2. enum定义枚举类
jdk5.0之后,可以使用enum关键字定义枚举类
public class test {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);//SPRING
System.out.println(Season.class.getSuperclass());//class java.lang.Enum
//可以看出,enum默认继承java.lang.Enum类,它重写了toString方法,直接输出对象名
}
}
enum Season{
//1.提供当前枚举类的对象,对象之间用','分隔,末尾对象用';'结束
//若无属性,括号也可省略
SPRING("春天", "春暖花开"),
SUMMER("夏天", "夏暖花开"),
AUTUMN("秋天", "秋暖花开"),
WINTER("冬天", "冬暖花开");
//2.声明Season对象的属性:private final 修饰
private final String seasonName;
private final String seasonDesc;
//3.私有化类的构造器(防止外界调用,产生不确定个数的对象),并给对象属性赋值
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
enum类的主要方法
values()
:返回枚举类中的对象数组
valueOf(String str)
:将一个字符串转为对应的枚举类对象(字符串必须是枚举类对象)
toString()
:返回当前 枚举类 对象常量 的名称
使用enum定义的枚举类实现接口
- 实现接口,在enum类中实现抽象方法
这样子,每个枚举类对象调用此方法,执行的一样
- 让枚举类的对象分别实现接口中的抽象方法
这样子,每个枚举类对象调用方法,执行的不同
interface inter{
void show();
}
enum Season implements inter{
//1.提供当前枚举类的对象,对象之间用','分隔,末尾对象用';'结束
SPRING("春天", "春暖花开"){
@Override
public void show() {
}
},
SUMMER("夏天", "夏暖花开"){
@Override
public void show() {
}
},
AUTUMN("秋天", "秋暖花开"){
@Override
public void show() {
}
},
WINTER("冬天", "冬暖花开"){
@Override
public void show() {
}
};
//2.声明Season对象的属性:private final 修饰
private final String seasonName;
private final String seasonDesc;
//3.私有化类的构造器(防止外界调用,产生不确定个数的对象),并给对象属性赋值
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}