我爱学Java之枚举

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

/**
 * 枚举用法详解
 * 
 * @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);
    }
}

运行结果 :

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值