美文网首页
创建对象之枚举

创建对象之枚举

作者: 阿亮私语 | 来源:发表于2016-04-28 22:18 被阅读871次

    有些对象根据需求需要保证其唯一性,此时需要用单例模式,单例模式采用枚举是最好的解决方式

    package com.liangliang.coreJava.OOP.eum;

    public enum Elvis
    {
    INSTANCE("Solar","25");
    private final String name;
    private final String age;
    private Elvis(String name,String age){
    this.name=name;
    this.age =age;
    }
    public void leaviBuilding(){
    System.out.println("name="+name+",age="+age);
    }
    public static Elvis getInstance(){
    return Elvis.INSTANCE;
    }
    }

    1、代码简单
    2、可以防止序列化时破坏单例
    3、线程安全,不需要考虑双重锁的问题
    
    通过反编译后代码我们可以看到,public final class T extends Enum,说明,该类是继承了Enum类的,
    同时final关键字告诉我们,这个类也是不能被继承的。当我们  使用enmu来定义一个枚举类型的时候,编
    译器会自动帮我们创建一个final类型的类继承Enum类,所以枚举类型不能被继承,我们看到这个类中有几
    个属性和方法。
            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
                });
            }
        }
        因为static类型的属性会在类被加载之后被初始化,当一个Java类第一次被真正使用到的时候静态资源被初始化、Java类的加载和初始化过程都是线程安全的。
        所以,创建一个enum类型是线程安全的。

    相关文章

      网友评论

          本文标题:创建对象之枚举

          本文链接:https://www.haomeiwen.com/subject/spphrttx.html