java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料

保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。

在实际编程中,有时会需要一些固定的数量有限的数据集合,例如周一到周日,春夏秋冬四个季节,这时候就需要用到Java中的枚举类型。枚举类型用enum修饰,除了不能继承自一个enum外,基本上可以将它看作一个类,而其中所枚举的常量可以看做是这个类的相应实例。下面结合代码说明下枚举的具体用法。

1/**
 * 枚举用法详解
 * 
 * @author JavaSheng
 *
 */
public class TestEnum {
    /**
     * 最简单的枚举
     */

    public enum Season{
        SPRING, SUMMER, AUTUMN, WINTER;
    }

    /**
     * 带有成员变量和方法的枚举
     */

    public enum Color{
        RED, GREEN, BLUE;//枚举常量必须在枚举开头声明
        private static final String DEFAULT_COLOR = "WHITE";

        public static boolean isDefault(String color){
            if(DEFAULT_COLOR.equals(color))
                return true;
            else
                return false;
        }
    }

    /**
     * 带有构造器的枚举
     */

    public enum Size{
        SMALL("S"), MEDIUM("M"),LARGE("L");
        //此种带参数的枚举必须定义相应的构造器,参数可任意多个
        //必须做到统一,即要带参数就都带,要不就都不带
        //方法必须在实例之后
        private String size;
        //构造器必须为包访问或私有类型
        Size(String size){
            this.size = size;
        }
        public String getSize(){
            return size;
        }
    }

    /**
     * 带有抽象方法的枚举
     */

    public enum Status{
        OFF{
            public String getStatus(){
                return "关";
            }
        },

        ON{
            public String getStatus(){
                return "开";
            }
        };
        //此种形式必须定义抽象方法
        public abstract String getStatus();
    }

    public static void main(String[] args){
        Season season = Season.AUTUMN;

        switch(season){
        case SPRING:
            System.out.println("Now is spring");
            break;
        case SUMMER:
            System.out.println("Now is summer");
            break;
        case AUTUMN:
            System.out.println("Now is autumn");
            break;
        case WINTER:
            System.out.println("Now is winter");
            break;
        }

        System.out.println(Color.isDefault("WHITE"));

        Size s = Size.LARGE;
        System.out.println(s.getSize());

        Status st = Status.OFF;
        System.out.println(st.getStatus());

        //枚举类型中还有一些其他的静态非静态方法

        //toString() 返回枚举常量名
        String sizeName = Size.LARGE.toString();
        System.out.println(sizeName);

        //静态values方法,返回包含所有枚举常量的数组
        //编译器创建的enum类都继承自Enum类,但是Enum类中没有values方法,所有values方法是编译器添加的
        Size[] sValue = Size.values();
        for(int i = 0; i < sValue.length; i++){
            System.out.print(sValue[i].getSize()+ ",");
        }
        System.out.println();

        //还可以通过getEnumConstants方法获得enum常量
        Enum e = Size.MEDIUM;
        for(Enum en : e.getClass().getEnumConstants())
            System.out.println(en);

        //ordinal() 返回枚举常量位置,从零计数
        Size s1 = Size.MEDIUM;
        System.out.println(s1.ordinal());

        //valueOf 将字符串转化为枚举类型,但必须是已存在于枚举常量中
        Size s2 = Enum.valueOf(Size.class, "SMALL");
        System.out.println(s2);
    }
}

运行结果 :

java枚举

因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。

后续会有更多的精彩的内容分享给大家。