枚举:编程中存在着几个固定的数据集,它们的数值比较稳定,且数值是有限的。
比如:一周的七天,开发案例中的交通灯等。。。
枚举的好处:使用枚举降低了程序出错的概率,提高代码可读性和维护性;
枚举的常用方法:values 遍历所有的枚举值 oridinal获取枚举值在枚举中的位置
/*请编写一个关于星期几的枚举WeekDay,要求:
•枚举值:MON,TUE,WED,THU,FRI,SAT,SUN
•该枚举要有一个方法,调用该方法返回中文格式的星期*/
enum Test6 {
MON("周一"),TUE("周二"),WED("周三"),THU("周四"),FRI("周五"),SAT("周六"),SUN("周日");
private String localeString;
private Test6(String localeString){
this.localeString = localeString;
}
public String getLocaleString(){
return localeString;
}
}
System.out.println(Test6.WED.getLocaleString());
枚举的定义:
枚举定义需要使用关机字 enum;
枚举的使用:
1.常量
public enum color{
RED, GREEN, BLANK, YELLOW
}
2.switch
switch只支持int,char,enum类型
package it.heima.com;
public enum Color {
GREED,YELLOW,RED
}
package it.heima.com;
public class Light {
Color c = Color.GREED;
public void change(){
switch(c){
case RED:
c = Color.GREED;
break;
case YELLOW:
c = Color.RED;
break;
case GREED:
c = Color.YELLOW;
break;
}
}
}
3.向枚举中添加新方法 枚举的高级应用
package it.heima.com;
public enum Color {
RED("红色",1),GREED("绿色",2),YELLOW("黄色",3);
private String name;
private int index;
private Color(String name , int index){
this.name = name;
this.index = index;
}
public static String getName(int index){
for(Color c : Color.values()){
if(c.getIndex()== index){
return c.getName();
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
4.覆盖枚举的方法
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//覆盖方法
@Override
public String toString() {
return this.index+"_"+this.name;
}
}
5.实现接口 : 枚举实现接口 没有毛特殊的,一样的implements 一样的实现接口方法
6.使用接口组织枚举
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
7.Java中的枚举是一个对象,枚举对象中的各枚举项也是对象。在Java中,集合容器要求存储在其中的每一个成员均是对象类型,而枚举作为一种特殊的类,Java亦专门为枚举提供了集合容器EnumSet和EnumMap。
public enum Role{
SYSADMIN,
ROLEA,
ROLEC;
}
public static voidmain(String[] args)
{
EnumSet<Role> es= EnumSet.of(Role.ROLEA, Role.ROLEB);
for(Role role: es)
{
System.out.println(role);
}
}
publicclass EnumMapExample
{
public static void main(String[] args)
{
EnumMap<Role, String> em = newEnumMap<Role, String>(Role.class);
em.put(Role.SYSADMIN, "系统管理员");
em.put(Role.ROLEA, "角色A");
System.out.println(em.size());
System.out.println(em.get(Role.SYSADMIN));
}
}