概述
如何定义枚举类?
枚举类:一个类中的对象是有限的、可数多个的。如果一个枚举类的对象只有一个,那么可以看做单实例的实现方式。
1.自定义枚举类
public class EnumTest{
public static void main(String[] args) {
Season season = Season.SPRING;
System.out.println(season);
Season autumn = Season.AUTUMN;
System.out.println(autumn.getSEASONNAME());
System.out.println(autumn.getSEASONDESC());
}
}
class Season {
1.给对象声明,要求属性声明为: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("冬天","白雪皑皑");
public String getSEASONNAME() {
return SEASONNAME;
}
public String getSEASONDESC() {
return SEASONDESC;
}
@Override
public String toString() {
return "Season{" +
"SEASONNAME='" + SEASONNAME + '\'' +
", SEASONDESC='" + SEASONDESC + '\'' +
'}';
}
}
2.使用enum关键字定义枚举类
public class EnumTest2 {
public static void main(String[] args) {
Season season = Season.WINTER;
System.out.println(season);
Season spring = Season.SPRING;
System.out.println(spring.getSEASONNAME());
System.out.println(spring.getSEASONDESC());
}
}
enum Season {
1.枚举类的对象要放在开头。原来定义对象格式:
public static final Season SPRING = new Season("春天","春暖花开");
把上面相同格式去掉,如:public static final Season,= new Season。
后面的是实例化对象的构造器:("春天","春暖花开"),如果是无参构造器则是SPRING。
对象之间用逗号隔开,最后一个用分号。
SPRING("春天","春暖花开"),
SUMMER("夏天","夏日炎炎"),
AUTUMN ("秋天","秋高气爽"),
WINTER("冬天","白雪皑皑");
2.定义属性 private final
private final String SEASONNAME;
private final String SEASONDESC;
3.私有化构造器(private可以省略),并给常量赋值
private Season(String SEASONNAME,String SEASONDESC){
this.SEASONNAME = SEASONNAME;
this.SEASONDESC = SEASONDESC;
}
public String getSEASONNAME() {
return SEASONNAME;
}
public String getSEASONDESC() {
return SEASONDESC;
}
@Override
public String toString() {
return "Season{" +
"SEASONNAME='" + SEASONNAME + '\'' +
", SEASONDESC='" + SEASONDESC + '\'' +
'}';
}
}
枚举类主要方法
- values():返回枚举类型的对象数组,
- valueOf():把一个字符串转为对应的枚举类对象,要求字符串必须是枚举类对象的名字,否则会报:IllegalArgumentException异常。
例:
public class EnumTest2 {
public static void main(String[] args) {
//1.values()方法
Season[] seasons = Season.values();
for (int i=0;i<seasons.length;i++){
System.out.println(seasons[i]);
}
//2.valueOf()方法
Season season = Season.valueOf("SPRING");
System.out.println(season);
}
}
enum Season {
SPRING("春天","春暖花开"),
SUMMER("夏天","夏日炎炎"),
AUTUMN ("秋天","秋高气爽"),
WINTER("冬天","白雪皑皑");
private final String SEASONNAME;
private final String SEASONDESC;
private Season(String SEASONNAME,String SEASONDESC){
this.SEASONNAME = SEASONNAME;
this.SEASONDESC = SEASONDESC;
}
public String getSEASONNAME() {
return SEASONNAME;
}
public String getSEASONDESC() {
return SEASONDESC;
}
@Override
public String toString() {
return "Season{" +
"SEASONNAME='" + SEASONNAME + '\'' +
", SEASONDESC='" + SEASONDESC + '\'' +
'}';
}
}
枚举类对象分别实现接口
由枚举类统一实现接口
interface Thread{
void show();
}
enum State implements Thread{
START,
RUNNING,
STOP;
@Override
public void show() {
//统一实现接口的方法
}
}
分别由不同的对象实现接口
interface Thread{
void show();
}
enum State implements Thread{
START("线程启动"){
@Override
public void show() {
System.out.println("线程正在启动。");
}
},
RUNNING("线程运行"){
@Override
public void show() {
System.out.println("线程正在运行。");
}
},
STOP("线程停止"){
@Override
public void show() {
System.out.println("线程停止。");
}
};
public final String DESC;
private State(String DESC){
this.DESC = DESC;
}
}