一、枚举类
- 类的对象只有有限个,确定的,我们称此类为枚举类
- 当需要定义一组常量时,强烈建议使用枚举类
- 如果枚举类中只有一个对象,则可以作为单例模式的实现方式
1.1、如何定义枚举类
方式一:jdk 5.0之前,自定义枚举类
四步:
1.声明Season对象的属性:private final 修饰
2.私有化类的构造器,并给对象属性赋值
3.提供当前枚举类的多个对象:public static final的
4.其他诉求1:获取枚举类的对象的属性
class Season{
//1.声明Season对象的属性:private final 修饰
private final String seasonName;//在构造器中赋值
private final String seasonDesc;
//2.私有化类的构造器,并给对象属性赋值
public Season(String seasonName, String seasonDesc){
this.seasonDesc = seasonDesc;
this.seasonName = seasonName;
}
//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.其他诉求1:获取枚举类的对象的属性
public String getSeasonName(){
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
方式二:jdk 5.0, 可以使用enum关键字定义枚举类
定义的枚举类默认继承于 java.lang.Enum
类
1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
后面三个和方式一一样
2.私有化类的构造器,并给对象属性赋值
3.提供当前枚举类的多个对象:public static final的
4.其他诉求1:获取枚举类的对象的属性
//1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
SPRING ("春天","春暖花开"),
SUMMER("夏天","蛙声一片"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","银装素裹");
1.2、Enum类的主要方法
values()
方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的 枚举值,换句话说:查看所有的枚举值可以用此方法。valueOf(String str)
:可以把一个字符串转为对应的枚举类对象。要求字符 串必须是枚举类对象的“名字”。如不是,会有运行时异常: IllegalArgumentException。toString()
:返回当前枚举类对象常量的名称
1.3、使用enum关键字定义的枚举类实现接口的情况
情况一:实现接口,在enum类中实现抽象方法
情况二:让枚举类的对象分别实现接口中的抽象方法
/**
* @author: Arbicoral
* @Description: 测试枚举类
*/
public class testEnum {
public static void main(String[] args) {
People spring = People.SPRING;
System.out.println(spring);
People winter = People.WINTER;
System.out.println(winter);
System.out.println("+++++++++++++++++++++++");
// 遍历 values():返回枚举类型的对象数组
for (People value : People.values()) {
System.out.println(value);
value.show();
}
System.out.println("-----------------------");
// valueOf(String str):把字符串转为对应的枚举类对象
People winter1 = People.valueOf("WINTER");
System.out.println(winter1);
// toString()
System.out.println("======================");
String s = People.SUMMER.toString();
System.out.println(s);
}
}
interface info{
void show();
}
// 使用 enum关键字自定义枚举类
enum People implements info{
// 1.给当前枚举类创建对象,必须是第一步!否则会报错
SPRING("Arbicoral",1001){
public void show(){
System.out.println("春天在哪里?");
}
},
SUMMER("Arbicoral",1002){
public void show(){
System.out.println("蛙声一片");
}
},
AUTUMN("Arbicoral",1003){
public void show(){
System.out.println("秋天不回来");
}
},
WINTER("Arbicoral",1004){
public void show(){
System.out.println("大约在冬季");
}
};
// 2.声明 testEnum的属性
private final String name;
private final int id;
//3、提供私有化的构造器 并给对象属性赋值
People(String name, int id) {
this.name = name;
this.id = id;
}
// 4.其他诉求:如获取枚举类对象的属性
public String getName() {
return name;
}
public int getId() {
return id;
}
}