枚举类
枚举类
枚举类本质上是一个类,只不过这个类的对象是有限个的,不能让用户随便创建
枚举类的例子很多,比如说星期、月份、性别、订单状态、支付方式、线程状态等
开发中,如果针对于某个类,其实例是确定个数的,则推荐将此类声明为枚举类
如果枚举类的实例只有一个,则可以看作是单例的实现方式
枚举类方法
方法名 | 说明 |
---|---|
toString() | 在重写前,返回被调用的对象。可通过重写显示想要的内容 |
name() | 和没重写的toString()功能相同,返回当前对象的内容 |
values() | 返回枚举类型所有对象,通常用来遍历枚举类型用 |
valueOf(String objName) | 根据对象名找到该对象 |
ordinal() | 此方法非静态,用来查询此对象在枚举类生成次序 |
在实际开发中,枚举类型其实只需要这样写,代表着一个只有四个类型的构造类型
public enum Status {
//在职,空闲,假期,离职;
BUSY,FREE,VOCATION,DIMISSION;
}
枚举类实例
public class SeasonTest1 {
public static void main(String[] args) {
System.out.println(Season1.SPRING.name());//SPRING
System.out.println(Season1.SUMMER);//Season1{seasonName='夏天', SeasonDesc='夏日炎炎'}
Season1[] values = Season1.values();
for (Season1 value : values) {
System.out.println(value);
}
/*Season1{seasonName='春天', SeasonDesc='春暖花开'}
Season1{seasonName='夏天', SeasonDesc='夏日炎炎'}
Season1{seasonName='秋天', SeasonDesc='秋高气爽'}
Season1{seasonName='冬天', SeasonDesc='白雪皑皑'}*/
System.out.println(Season1.valueOf("AUTUMN"));//Season1{seasonName='秋天', SeasonDesc='秋高气爽'}
}
}
enum Season1 {
//本质上是public static final Season SPRING = new Season("春天", "春暖花开");
//枚举类的声明的实例应该是静态常量,但在枚举类型类中,必须省略 public static final
SPRING("春天", "春暖花开"),
SUMMER("夏天", "夏日炎炎"),
AUTUMN("秋天", "秋高气爽"),
WINTER("冬天", "白雪皑皑");
//类中属性是不需要静态的,毕竟是多个在类中声明的对象
private final String seasonName;//季节的名称
private final String SeasonDesc;//季节的描述
//将构造方法私有化
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
SeasonDesc = seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return SeasonDesc;
}
@Override
public String toString() {
return "Season1{" +
"seasonName='" + seasonName + '\'' +
", SeasonDesc='" + SeasonDesc + '\'' +
'}';
}
}
枚举类实现接口操作
- 枚举类实现接口,直接在枚举类中重写接口的抽象方法,使用不同的枚举类对象调用此方法时,执行的同一个方法
- 枚举类实现接口,在枚举类的每一个实例中重写接口的抽象方法,使得不同的实例在调用该方法时执行不同的方法
枚举类实现接口实例
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
public class SeasonTest3 {
public static void main(String[] args) {
Season1.SPRING.show();//春天在哪里
Season1.SUMMER.show();//宁静的夏天
Season1.AUTUMN.show();//秋意浓
Season1.WINTER.show();//大约在冬季
}
}
interface Show{
public void show();
}
enum Season1 implements Show{
//本质上是public static final Season SPRING = new Season("春天", "春暖花开");
//枚举类的声明的实例应该是静态常量,但在枚举类型类中,必须省略 public static final
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;//季节的名称
private final String SeasonDesc;//季节的描述
//将构造方法私有化(在enum中,构造方法一定是私有化的,不需要额外添加private参数)
Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
SeasonDesc = seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return SeasonDesc;
}
@Override
public String toString() {
return "meijulei.Season1{" +
"seasonName='" + seasonName + '\'' +
", SeasonDesc='" + SeasonDesc + '\'' +
'}';
}
}
在对象中可以直接重写类中方法