Java基础——枚举

理解枚举类型

枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据结构,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束。

枚举的定义

package t6;
// 定义枚举类型
enum Day{
    MONDAY, TUESDAY, WEDNEDAT,
    THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

public class Run {

	public static void main(String[] args) throws InterruptedException {
		// 直接引用
		Day day = Day.MONDAY;
	}
}

枚举实现原理

实际上在使用enum创建枚举类型并编译后,编译器会为我们生成一个相关的类,这个类继承了Java API中的java.lang.Enum类,也就是说通过关键字enum创建枚举类型在编译后事实上也是一个类类型,而且该类继承自java.lang.Enum类。

用javac编译前面的Run.java文件后,分别生成Day.class和Run.class文件。Day.class就是枚举类型。

反编译Day.class文件:

//反编译Day.class
final class Day extends Enum
{
    //编译器为我们添加的静态的values()方法
    public static Day[] values()
    {
        return (Day[])$VALUES.clone();
    }
    //编译器为我们添加的静态的valueOf()方法,注意间接调用了Enum也类的valueOf方法
    public static Day valueOf(String s)
    {
        return (Day)Enum.valueOf(com/zejian/enumdemo/Day, s);
    }
    //私有构造函数
    private Day(String s, int i)
    {
        super(s, i);
    }
     //前面定义的7种枚举实例
    public static final Day MONDAY;
    public static final Day TUESDAY;
    public static final Day WEDNESDAY;
    public static final Day THURSDAY;
    public static final Day FRIDAY;
    public static final Day SATURDAY;
    public static final Day SUNDAY;
    private static final Day $VALUES[];

    static 
    {    
        //实例化枚举实例
        MONDAY = new Day("MONDAY", 0);
        TUESDAY = new Day("TUESDAY", 1);
        WEDNESDAY = new Day("WEDNESDAY", 2);
        THURSDAY = new Day("THURSDAY", 3);
        FRIDAY = new Day("FRIDAY", 4);
        SATURDAY = new Day("SATURDAY", 5);
        SUNDAY = new Day("SUNDAY", 6);
        $VALUES = (new Day[] {
            MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
        });
    }
}

编译器确实帮助我们生成了一个Day类,该类是final类型的,无法被继承。而且该类继承自java.lang.Enum类,该类是一个抽象类。
该类包括:

  1. 将定义的几个枚举实例 实例化为该类的对象。
  2. 生成两个静态方法,分别是values()和valueOf()。

https://blog.csdn.net/javazejian/article/details/71333103
https://blog.csdn.net/testcs_dn/article/details/78604547

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值