来讲一下Enum

照这速度,明天起来南京都要开快船了。。。
偶然间听了李志 在一次聚会上唱的‘梵高先生’,希望这辈子只有酒肉朋友吧

言归正传

什么是枚举?

当初上大学时,没好好听课,就记得当常量来使用就行了。。。卧槽

枚举:关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。(摘自Java 编程思想)

基本使用方法

values( ) : 遍历枚举实例 —– EnumA.values( )

ordinal( ) : 返回每个enum实例在声明是次序。

name( ):返回enum声明实例时的名字(和toString( )效果一样)

Enum.valueOf( Class<T> enumType,String name ) : 这是Enum的static方法,根据给定的name返回相应的enum实例

enmu是什么?

首先看到下面的代码

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

反编译一下:(怎么反编译我也不会,下节研究)

public final class T extends Enum
{
    private T(String s, int i)
    {
        super(s, i);
    }
    public static T[] values()
    {
        T at[];
        int i;
        T at1[];
        System.arraycopy(at = ENUM$VALUES, 0, at1 = new T[i = at.length], 0, i);
        return at1;
    }

    public static T valueOf(String s)
    {
        return (T)Enum.valueOf(demo/T, s);
    }

    public static final T SPRING;
    public static final T SUMMER;
    public static final T AUTUMN;
    public static final T WINTER;
    private static final T ENUM$VALUES[];
    static
    {
        SPRING = new T("SPRING", 0);
        SUMMER = new T("SUMMER", 1);
        AUTUMN = new T("AUTUMN", 2);
        WINTER = new T("WINTER", 3);
        ENUM$VALUES = (new T[] {
            SPRING, SUMMER, AUTUMN, WINTER
        });
    }
}

答案:enum是关键字,就和class一样,真正的是 继承了Enum类,
同时final关键字告诉我们,这个类也是不能被继承的。
当我们使用enmu来定义一个枚举类型的时候,编译器会自动帮我们创建一个final类型的类继承Enum类,所以枚举类型不能被继承。

为什么说enum是线程安全的?

我们看到这个类中有几个属性和方法。

    public static final T SPRING;
        public static final T SUMMER;
        public static final T AUTUMN;
        public static final T WINTER;
        private static final T ENUM$VALUES[];
        static
        {
            SPRING = new T("SPRING", 0);
            SUMMER = new T("SUMMER", 1);
            AUTUMN = new T("AUTUMN", 2);
            WINTER = new T("WINTER", 3);
            ENUM$VALUES = (new T[] {
                SPRING, SUMMER, AUTUMN, WINTER
            });
        }

都是static,我们知道static代码块是在类加载的时候被初始化的

答案:

当一个Java类第一次被真正使用到的时候静态资源被初始化、Java类的加载和初始化过程都是线程安全的。所以,创建一个enum类型是线程安全的。

so 尽情的使用枚举单例吧

public enum EasySingleton{
    INSTANCE;
}

通过EasySingleton.INSTANCE来访问。

参考:
http://www.hollischuang.com/archives/197?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值