顾名思义 枚举类就是“枚举出来的类”,
例如:一年四季 season:spring、summer、autumn、winter 除此之外没有其他季节存在,确定类的数量的情况使用
常用在状态的表示,因为状态固定几个,都用数字表示的话分不清什么意思,这就用上枚举类了。也可以表示分类的类别。
class season{
//2.声明属性变量
private final String seasonName;
private final String seasonDesc;
//1.私有化构造器
private season(String seasonName,String seasonDesc){
this.seasonName=seasonName;
this.seasonDesc=seasonDesc;
}
//3.实例变量的get方法,public外部可以调用
public String getSeasonName(){
return seasonName;
}
public String getSeasonDesc(){
return seasonDesc;
}
//4.创建类的实例,需要 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("冬天","白雪皑皑");
}
可以看出来,枚举类实际上就是类之中已经定义好的几个固定对象,数量固定,不允许修改。
enum season{
//1.直接就创建实例,不再需要修饰符号,类名,构造器。对象之间使用逗号隔开
SPRING("春天","春暖花开"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","白雪皑皑");
//2.声明属性变量
private final String seasonName;
private final String seasonDesc;
//3.私有化构造器
private season(String seasonName,String seasonDesc){
this.seasonName=seasonName;
this.seasonDesc=seasonDesc;
}
//4.实例变量的get方法,public外部可以调用
public String getSeasonName(){
return seasonName;
}
public String getSeasonDesc(){
return seasonDesc;
}
}
相较于jdk5.0之前的写法 enum枚举类定义,省略了枚举对象赋值步骤的前缀写法。
enum定义的类,其父类是java.lang.enum,不要再显示定义它的父类
方法 | 返回值 |
---|---|
String toString() | 默认返回对象名(常量名) |
String name() | 得到枚举常量的名称 |
values() | 把枚举类中所有对象返回到一个对象数组里 |
valueOf(String ObjectName) | 根据对象名称(String)找出这个对象返回,如果找不到会报错 |
int ordinal() | 返回当前枚举类的次序号 |
情况1:枚举类实现接口,在枚举类中重写接口中的抽象方法,当不同的枚举对象调用此方法时,使用的时同一个方法。
情况2:想要每个对象的方法不同,枚举类实现接口后,分别给每个对象重写方法。
举例
interface info(){
void show();
}
enum season implements info {
//1.直接就创建实例,不再需要修饰符号,类名,构造器。对象之间使用逗号隔开
SPRING("春天","春暖花开"){
public void show(){
system.out.println("这里是春天");
}
},
SUMMER("夏天","夏日炎炎")
public void show(){
system.out.println("这里是夏天");
},
AUTUMN("秋天","秋高气爽")
public void show(){
system.out.println("这里是秋天");
},
WINTER("冬天","白雪皑皑")
public void show(){
system.out.println("这里是冬天");
};
实际使用不需要定义属性构造器之类的,只需要规定几个枚举对象的话可以写得很简洁
public enum status{
BUSSY,FREE,VOCATION,DIMISSION;
}
推荐阅读: