java枚举

      enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。enum使用也比较广泛,下面就说一下使用枚举过程需要注意的问题。

1 枚举的创建

    枚举使用enum关键字,还是先来看一段代码吧

public enum WeekDay {
        SUN, MON, TUE, WED, THU, FN("星期五"), SAT();
        private WeekDay() {
            System.out.println("没有参数构造函数");
        }

        private WeekDay(String s) {
            System.out.println(s + "有参数构造函数");
        }
    }

    实例代码中创建了一个WeekDay的枚举,如果在主main方法里面执行语句:WeekDay today = WeekDay.SAT;其实这段代码实际上调用了7次 Enum(String name, int ordinal):输出为:

没有参数构造函数
没有参数构造函数
没有参数构造函数
没有参数构造函数
没有参数构造函数
星期五有参数构造函数
没有参数构造函数

2 枚举遍历

    枚举通常需要遍历,常见的是联合switch—canse语句实现一些遍历功能。看下面的代码:

public enum EnumTest {
    MON, TUE, WED, THU, FRI, SAT, SUN;
}
public class Test {
    public static void main(String[] args) {
        for (EnumTest e : EnumTest.values()) {
            System.out.println(e.toString());
        }
        EnumTest test = EnumTest.TUE;
        switch (test) {
        case MON:
            System.out.println("今天是星期一");
            break;
        case TUE:
            System.out.println("今天是星期二");
            break;
        // ... ...
        default:
            System.out.println(test);
            break;
        }
    }
}

不难分析,上面的输出是MON

TUE
WED
THU
FRI
SAT
SUN
今天是星期二

for (EnumTest e : EnumTest.values())是将强版的for循环语句,使用规则是: for (循环变量类型 循环变量名称 : 要被遍历的对象) { 循环体}

3 枚举类型与抽象的综合使用

public class EnumConsAbstract {

    public static void main(String[] args) {                            
         WeekDay today = WeekDay.SAT;
         System.out.println("SAT的下一天为"+today.nextDay());  
    }
    public enum WeekDay {                                               
        SUN {
            public WeekDay nextDay() {
                return MON;
            }
        },
        MON {
            public WeekDay nextDay() {
                return TUE;
            }
        },
        TUE {
            public WeekDay nextDay() {
                return WED;
            }
        },
        WED {
            public WeekDay nextDay() {
                return THU;
            }
        },
        THU {
            public WeekDay nextDay() {
                return FN;
            }
        },
        FN {
            public WeekDay nextDay() {
                return SAT;
            }
        },
        SAT {
            public WeekDay nextDay() {
                return SUN;
            }
        };
        public abstract WeekDay nextDay();                             
    }
}

    枚举里面创建了一个抽象方法,返回类型是枚举类型,用来测试当天时间的下一天是周几。枚举内容包括一周内的七天,对每一个元素都重写了抽象方法,返回不同的枚举值。输出结果是:SAT的下一天为SUN。

4 使用构造函数创建枚举对象

public class WeekDay {
    private WeekDay(){                                          
    }
    //创建了关于星期的七个对象
    public final static WeekDay SUN = new WeekDay();
    public final static WeekDay MON = new WeekDay();
    public final static WeekDay TUE = new WeekDay();
    public final static WeekDay WED = new WeekDay();
    public final static WeekDay THU = new WeekDay();
    public final static WeekDay FN = new WeekDay();
    public final static WeekDay SAT = new WeekDay();

    public WeekDay nextDay() {                               
        if (this == SUN) { 
            return MON;
        } else if (this == MON) {
            return TUE;
        } else if (this == TUE) {
            return WED;
        } else if (this == WED) {
            return THU;
        } else if (this == THU) {
            return FN;
        } else if (this == FN) {
            return SAT;
        } else {
            return SUN;
        }
    }
    public String toString(){                              
        if (this == SUN) {
            return "星期日";
        } else if (this == MON) {
            return "星期一";
        } else if (this == TUE) {
            return "星期二";
        } else if (this == WED) {
            return "星期三";
        } else if (this == THU) {
            return "星期四";
        } else if (this == FN) {
            return "星期五";
        } else {
            return "星期六";
        }
    }
}

    使用构造函数创建信息的七个对象,这样也能到达创建枚举元素的目的。最后对nextDay()方法进行设计也能实现直接用枚举设计的功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值