枚举类Enum
定义:类的对象个数只有有限个,确定的
eg:星期:星期一、星期二、星期三......、星期天
性别:Man、Woman
季节:Spring(春天).....Winter(冬天)
线程状态:创建、就绪、运行、阻塞、死亡
支付方式:现金、微信、支付宝、银行卡、信用卡
当定义一组常量时,强烈推荐使用枚举类
如果枚举类中只有一个对象,可以当做单例模式的实现
如何定义枚举类
1)方式一:jdk1.5之前,自定义枚举类(很多项目仍然采用此定义方式)
代码实现
package com.tohka.demos;
//自定义枚举类
public 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 + '\'' +
'}';
}
}
//测试类
package com.tohka.test;
import com.tohka.demos.Season;
public class SeasonTest {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
}
}
2)方式二:jdk5.0,可以使用enum关键字定义枚举类
代码实现
package com.tohka.demos;
//enum关键字定义枚举类
//默认继承class java.lang.Enum
public enum Season {
//1.提供当前枚举对象,省略重复的关键字,= 直接常量名(属性1,属性2)。多个对象间用,隔开,末尾用;结束
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;
}
/* //5.其他述求。toString方法 可不写,默认基础父类Enum类的toString方法
@Override
public String toString() {
return "Season{" +
"SeasonName='" + SeasonName + '\'' +
", SeasonDesc='" + SeasonDesc + '\'' +
'}';
}*/
}
//测试类
package com.tohka.test;
import com.tohka.demos.Season;
public class SeasonTest {
public static void main(String[] args) {
Season summer = Season.SUMMER;
System.out.println(summer);
System.out.println(Season.class.getSuperclass());
}
}
//测试结果
//SUMMER
//class java.lang.Enum
Enum枚举类常用的方法
Values()方法:返回枚举类型的对象数组
ValueOf(String str)方法:返回枚举类中对象名是objName的对象
toString():返回当前枚举类对象常量的名称
System.out.println("****************");
//values()
Season[] seasons = Season.values();
for (Season season : seasons) {
System.out.println(season);
}
//返回线程生命周期常量
Thread.State[] states = Thread.State.values();
for (Thread.State state : states) {
System.out.println(state);
}
System.out.println("**********");
//valueOf(String str) 返回枚举类中对象名是str的对象
Season winter = Season.valueOf("WINTER");
System.out.println(winter);
使用enum关键字定义的枚举类实现接口的情况
情况一:实现接口,在enum类中实现抽象方法
//接口
package com.tohka;
public interface Info {
public void show();
}
//实现接口
//enum枚举类
public enum Season implements Info {
......
public void show() {
System.out.println("这是一个季节");
}
}
//测试
System.out.println("**********");
winter.show();
//结果
//**********
//这是一个季节
情况二:让枚举类对象分别实现接口中的抽象方法
//接口
package com.tohka;
public interface Info {
public void show();
}
//实现接口
//enum枚举类
//enum枚举类
public enum Season implements Info {
//1.提供当前枚举对象,省略重复的关键字,= 直接常量名(属性1,属性2)。多个对象间用,隔开,末尾用;结束
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("这是冬天");
}
};
......
}
//测试
System.out.println("**********");
winter.show();
//结果
//**********
//这是冬天

浙公网安备 33010602011771号