目录
1、说明
类的对象只有有限个数,且是明确的,这样的类,被称为枚举类。
和数学中的枚举法一样,通过一个个的列举出所有可能来解决问题。
例如星期,从星期一到星期天,星期就是类,而从星期一到星期天,则是星期类中的对象,数量有限,且是明确的,不是匿名对象。
所以,当我们需要定义一组常量时,建议使用枚举类,因为一组常量数量有限,且是常量,对象是明确的,使用枚举类定义这一组常量,方便于使用和管理。
在jdk1.5之前,需要自定义枚举类,jdk1.5之后,使用关键字enum来定义
当枚举类只有一个对象时,则就是单例模式。
单例模式:构造器私有化,外部无法对类进行实例化对象,只能通过类的静态方式来调用里面的对象。
懒汉式:
public class Single {
private static Single single;
private Single() {
}
public Single getInstance() {
if (single == null) {
synchronized (this) {
if (single == null) {
single = new Single();
}
}
}
return single;
}
}
饿汉式:
public class Single {
private static Single single = new Single();
private Single() {
}
public Single getInstance() {
return single;
}
}
2、自定义枚举类
规则:
步骤:
1,私有化属性,使用private final修饰
2,私有化构造器,根据需要提供参数
3,提供当前枚举类的多个对象,使用private static final修饰
4、根据需要提供get和toString方法
public class SeasonEnum1 {
//1、声明私有、常量属性
private final String seasonName;
//2、私有化构造器
private SeasonEnum1(String seasonName) {
this.seasonName = seasonName;
}
//3、提供当前枚举类的多个对象,使用private static final修饰
public static final SeasonEnum1 SPRING = new SeasonEnum1("春天");
public static final SeasonEnum1 SUMMER = new SeasonEnum1("夏天");
public static final SeasonEnum1 AUTUMN = new SeasonEnum1("秋天");
public static final SeasonEnum1 WINTER = new SeasonEnum1("冬天");
@Override
public String toString() {
return seasonName;
}
}
3、关键字enum定义枚举类
1、enum默认继承Enum类,不需要去显式继承,enum的放在类名之前。
2、枚举类的对象必须声明在首行,只需写出对象的名字即可,如何有枚举类有属性,则提供一个括号,提供给构造器就行,且在多个枚举类之间使用“,”隔开,最后一个使用“;”。列出的对象实例,系统会自动加上public static final 修饰符。
3、构造器私有化,不使用时,它也默认是私有化的。
默认的toString方法,会打印例子名。
package eunm;
/**
* @description: 自定义枚举类
* @program: java_1
* @author: xichen
* @create: 2022-06-26 19:00
**/
public enum SeasonEnum1 {
SPRING("春天"),
SUMMER("夏天"),
AUTUMN("秋天"),
WINTER("冬天");
private final String SEASONNAME;
SeasonEnum1(String seasonName) {
this.SEASONNAME = seasonName;
}
@Override
public String toString() {
return SEASONNAME;
}
}
重写toString方法以后
4、Enum类常用方法
1、value()
![](https://i-blog.csdnimg.cn/blog_migrate/2cc485bfbb0782678e580046eba054b6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ad8d7f60465d75255a7182cd22a347bd.png)
2、valueOf(String str)
![](https://i-blog.csdnimg.cn/blog_migrate/9330a59b4921f6572df8f1c0e0c9aabf.png)
3、toString()
返回当前枚举类对象常量的名称
没有重写toString之前。
重写之后。
5、枚举类实现接口
1、类实现接口的方法写在类中,则与平时类实现接口一样,但是,枚举类中的对象,每一个对象都共享着这个实现方法。
2、枚举类实例对象,想要每一个对象的实现方法不相同,则需要在实例对象后面加入大括号,并在大括号内写实现方法。
package eunm;
/**
* @description: 自定义枚举类
* @program: java_1
* @author: xichen
* @create: 2022-06-26 19:00
**/
public enum SeasonEnum1 implements S{
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("冬天寒冷");
}
};
private final String SEASONNAME;
SeasonEnum1(String seasonName) {
this.SEASONNAME = seasonName;
}
@Override
public String toString() {
return SEASONNAME;
}
}