java中Enum详解

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 java中Enum详解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一.枚举的实现原理

定义一个简单的Enum,如下所示:

public enum Sex {
    MALE("男"),FEMALE("女");

    private String desc;

    Sex(String desc) {
        this.desc = desc;
    }
}

反编译后,如下:

public final class Sex extends Enum
{

    public static Sex[] values()
    {
        return (Sex[])$VALUES.clone();
    }

    public static Sex valueOf(String s)
    {
        return (Sex)Enum.valueOf(com/zpengc/lang/Sex, s);
    }

    private Sex(String s, int i, String s1)
    {
        super(s, i);
        desc = s1;
    }

    public static final Sex MALE;
    public static final Sex FEMALE;
    private String desc;
    private static final Sex $VALUES[];

    static 
    {
        MALE = new Sex("MALE", 0, "\u7537");
        FEMALE = new Sex("FEMALE", 1, "\u5973");
        $VALUES = (new Sex[] {
            MALE, FEMALE
        });
    }
}

由此可知:
1.枚举本质上是通过普通的类来实现的,这个类继承了java.lang.Enum,只是编译器为我们进行了处理
2.每个枚举常量是一个静态常量字段,指向了新建的对象实例
3.类中添加了valueof、values方法,定义了$VALUES[]数组,保存了所有枚举常量
4.所有枚举常量都通过静态代码块来进行初始化,即在类加载期间就初始化,并且用final修饰,防止篡改
5.默认生成构造函数,包含枚举所有成员变量的同时,也包含了父类Enum的成员变量name,ordinal,例如:
在这里插入图片描述

二.枚举中定义抽象方法

理解了枚举的实现远离,就明白枚举本质上也是普通的类,除了可以实现接口外,还可以在枚举类中定义抽象方法,这样每个枚举的对象只要分别实现了此抽象方法即可,例如

enum Color{
    RED{
        public String getColor(){//枚举对象实现抽象方法
            return "红色";
        }
    },
    GREEN{
        public String getColor(){//枚举对象实现抽象方法
            return "绿色";
        }
    },
    BLUE{
        public String getColor(){//枚举对象实现抽象方法
            return "蓝色";
        }
    };
    public abstract String getColor();//定义抽象方法
}

public class Test{
    public static void main(String[] args) {
        for (Color c:Color.values()){
            System.out.print(c.getColor() + "、");
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/130222.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!