声明 enum
枚举使用enum 关键字来声明,把所有可能的值依次罗列出来,其所有元素默认都是被public static final 修饰,即可直接使用了。
public enum WeekDay {
MON,TUS,WED,THU,FRI,SAT,SUN
}
注意:必须将所有值罗列在该类所有成员的最前面,且如果后面没有其他成员时,可以将末尾的分号; 省略不写,否则不可省略。
构造函数
1.构造函数只能是私有权限
public enum WeekDay {
MON,TUS,WED,THU,FRI,SAT,SUN;
private WeekDay(){}
}
等价于
public enum WeekDay {
MON,TUS,WED,THU,FRI,SAT,SUN;
WeekDay(){}
}
- 直接罗列的值相当于是调用了无参构造,即上面的代码也相当于这样
public enum WeekDay {
MON(),TUS(),WED(),THU(),FRI(),SAT(),SUN(){};
private WeekDay(){}
}
2.可以重载,必须提供无参构造
自带方法
values() 返回所有罗列出的值
private static void f2() {
WeekDay[] values = WeekDay.values();
for (WeekDay value : values) {
System.out.println(value);
}
}
MON
TUS
WED
THU
FRI
SAT
SUN
valueOf(String name) 根据名称来获取
前提是确实存在,否则抛出Exception in thread "main" java.lang.IllegalArgumentException: No enum constant vip.sjxq.test.WeekDay.SU1N at java.lang.Enum.valueOf(Enum.java:238)
private static void f3() {
WeekDay w = WeekDay.valueOf("SUN");
System.out.println(w);
}
可以有抽象成员
1.抽象方法
如果定义了抽象方法,则每个罗列出来的值都要去实现定义的抽象方法,如我们定义一个抽象的nextDay() 方法
public enum WeekDay {
MON() {
@Override
WeekDay nextDay() {
return TUE;
}
},TUE() {
@Override
WeekDay nextDay() {
return null;
}
},WED() {
@Override
WeekDay nextDay() {
return THU;
}
},THU() {
@Override
WeekDay nextDay() {
return FRI;
}
},FRI() {
@Override
WeekDay nextDay() {
return SAT;
}
},SAT() {
@Override
WeekDay nextDay() {
return SUN;
}
},SUN(){
@Override
WeekDay nextDay() {
return MON;
}
};
private WeekDay(){}
abstract WeekDay nextDay();
}
也可以再重写toString() 方法
public enum WeekDay {
MON() {
@Override
WeekDay nextDay() {
return TUE;
}
@Override
public String toString() {
return "星期一";
}
}, TUE() {
@Override
WeekDay nextDay() {
return null;
}
@Override
public String toString() {
return "星期二";
}
}, WED() {
@Override
WeekDay nextDay() {
return THU;
}
@Override
public String toString() {
return "星期三";
}
}, THU() {
@Override
WeekDay nextDay() {
return FRI;
}
@Override
public String toString() {
return "星期四";
}
}, FRI() {
@Override
WeekDay nextDay() {
return SAT;
}
@Override
public String toString() {
return "星期五";
}
}, SAT() {
@Override
WeekDay nextDay() {
return SUN;
}
@Override
public String toString() {
return "星期六";
}
}, SUN() {
@Override
WeekDay nextDay() {
return MON;
}
@Override
public String toString() {
return "星期天";
}
};
private WeekDay() {
}
abstract WeekDay nextDay();
}
|