课程咨询 :18357109557 QQ:3163902815

杭州java培训

杭州java培训 > 达内新闻 > 达内:Java高级特性——枚举
  • 达内:Java高级特性——枚举

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


  •     杭州达内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--零基础全日制班

开班日期:每周一

Java--零基础周末班

Java--零基础周末班

开班日期:每周一

Java--大数据全日制班

Java--大数据全日制班

开班日期:每周一

Java--大数据周末班

Java--大数据周末班

开班日期:每周一

  • 地址:杭州市西湖区文三路259号昌地火炬大厦1号楼14层
  • 课程培训电话:18357109557 QQ:3163902815 全国免费咨询热线:400-111-8989
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56