杭州Java培训
达内杭州Java培训中心

15268258619

热门课程

达内:Java高级特性——枚举

  • 时间:2016-01-07
  • 发布:杭州java培训
  • 来源:慕课社区


    杭州达内java培训专家介绍java中枚举的用法。

    java SE5问世前 ,我们使用枚举类型时,通常会使用static final 定义一组int常量来标识,代码如下

public static final int MAN = 0;
public static final int WOMAN = 1;

    这样就能实现枚举的功能,为什么还要引入枚举呢?再看一个同这组“int枚举”代码如下

public void showSex(int sex){
     switch(sex){
        case MAN:
           System.out.println("this is a boy");  
        break;    
        case WOMAN:
           System.out.println("this is a Girl");  
        break;
      }
}

    虽然看起来没有问题,但是一个项目基本都是基于团队开发,或许只有你自己知道int类型的1代表gril,0代表Boy。这就造成了阅读性很差,沟通成本很高,甚至代码很不安全。

   达内java培训专家指出,使用枚举就能很好的避免上面的问题。枚举用于存储数量有限的一组固定的数据集。例如性别、一年四季、颜色、一周七天都可以用到枚举。

    枚举的简单用法

 // 普通枚举
 public enum ColorEnum {
        white, red, green, blue;
 }

    /**
     *
     * 枚举中有一个自带的静态方法values(),返回enum实例的数据并且该数组中的元素顺序和声明时的顺序一样
     * 枚举也可以像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法
     */
    public enum SeasonEnum {
        //注:枚举写在最前面,否则编译出错
        spring, summer, autumn, winter;

        private final static String position = "test";

        public static SeasonEnum getSeason() {
            if ("test".equals(position))
                return spring;
            else
                return winter;
        }
    }
     /**
     * 带构造器的枚举
     * 必须带有一个参构造器和一个属性跟方法,否则编译出错
     *
     */
    public enum Mode {
        PULLDOWN("下拉"), PULLUP("上拉");
        private final String value;

        /**
         * 构造器默认也只能是private, 从而保证构造函数只能在内部使用
         *
         */
        private Mode(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    枚举中还有一个ordinal()方法返回一个int值,这是每个enum实例在声明时的次序,从0开始。枚举类还实现了Compareable接口,所以他具有compareTo()方法。同时还实现了Serializable接口,还自动为你提供了equals()和hashCode()方法。除了不能继承一个枚举类之外,我们基本上可以把枚举类当成一个常规的Java类,可以往其中添加新的方法,包括抽象方法甚至main方法。

    用枚举来实现上面的那个性别函数

public enum EnumSex {
        MAN, WOMAN

    }

    public static void showSex(EnumSex EnumSex) {
        switch (EnumSex) {
        case MAN:
            System.out.println("this is a boy");
            break;
        case WOMAN:
            System.out.println("this is a girl");
            break;
        }
    }

    public static void main(String[] args) {
        showSex(EnumSex.MAN);
        // showSex(EnumSex.Renyao) 编译报错

    }

    达内java培训专家认为,枚举的方式写代码,既有阅读性,又能解决安全性问题。






原文链接:http://www.imooc.com/article/3243
上一篇:达内:Java高级特性——泛型
下一篇:达内:Java高级特性——反射

恭喜达内获得《产学合作协同育人项目合作伙伴奖》

中传学子参加达内Java培训,转身成为Java工程师月薪12.5K

达内教育总裁韩少云受邀出席GIE国际教育峰会做主题演讲

学员参加达内网络营销培训,获10万年薪入职微众传媒

选择城市和中心
贵州省

广西省

海南省