枚举 代替常量类

首先,我们需要知道枚举是JDK5的新特性,是引用类,也是一种特殊的类。

jdk5以前是使用常量类

    public class DayDemo {
        public static final int MONDAY =1;
        public static final int TUESDAY=2;
        public static final int WEDNESDAY=3;
        public static final int THURSDAY=4;
        public static final int FRIDAY=5;
        public static final int SATURDAY=6;
        public static final int SUNDAY=7;
    }

jdk5后使用枚举

基本定义

使用关键字enum(类似class)来定义枚举

enum Day {
        MONDAY, TUESDAY, WEDNESDAY,
        THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }

上面定义了周一到周日的值,用大写逗号隔开-------枚举中定义的是常量

使用

直接通过枚举类引用
Day day =Day.MONDAY;

枚举原理

在使用关键字enum创建枚举类型并编译后,编译器会为我们生成一个相关的抽象类Day,这个类继承了Java API中的java.lang.Enum类,还帮助我们生成了7个Day类型的实例对象分别对应枚举中定义的7个日期,还为我们生成了两个静态方法,分别是values()和 valueOf()。

总结:使用关键字enum定义的枚举类型,在编译期后,也将转换成为一个实实在在的类,而在该类中,会存在每个在枚举类型中定义好常量的对应实例对象

values()和 valueOf()

values()和 valueOf()其实是java.lang.Enum类的。
如何使用呢?

	Day[] days2 = Day.values();
    System.out.println("day2:"+Arrays.toString(days2));
    Day day = Day.valueOf("MONDAY");
    System.out.println("day:"+day);

day2:[MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY]
day:MONDAY

实际开发中的定义以及使用

属性,属性对应的常量值,私有有参构造(无无参构造),只有getter方法。

    public enum Day2 {
	// 前面是文字描述,后面是代码
        MONDAY("星期一",1),
        TUESDAY("星期二",2),
        WEDNESDAY("星期三",3),
        THURSDAY("星期四",4),
        FRIDAY("星期五",5),
        SATURDAY("星期六",6),
        SUNDAY("星期日",7);//记住要用分号结束

    private String desc;//文字描述
    private Integer code; //对应的代码

    /**
     * 私有构造,防止被外部调用,枚举没有无参构造
     * @param desc
     */
    private Day2(String desc,Integer code){
        this.desc=desc;
     this.code=code;
        }
    /**
     * 定义方法,返回描述,跟常规类的定义没区别
	 * 枚举只有getter方法,setter方法没有,定义的时候就赋值好了
     * @return
     */
    public String getDesc(){
        return desc;
    }

     /**
         * 定义方法,返回代码,跟常规类的定义没区别
         * @return
         */
        public int getCode(){
            return code;
        }
		
		// 测试使用,上面就是完成的定义枚举
    public static void main(String[] args){
        for (Day2 day:Day2.values()) {
            System.out.println("name:"+day.name()+
                    ",desc:"+day.getDesc());
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LC超人在良家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值