#Java:enum #枚举类 @FDDLC
发布日期:2021-06-30 21:05:05 浏览次数:2 分类:技术文章

本文共 2081 字,大约阅读时间需要 6 分钟。

一、枚举的用途

枚举是Java中一种特殊的类,因而也叫枚举类。一般用来表示一类事物的多个状态/形态等,比如季节之于春夏秋冬,性别之于男女,等等。

 

二、枚举的简单例子

1、定义枚举类:

2、使用枚举类:

输出:

 

 

三、对二中例子的深入剖析

1、对Sex.java进行反汇编:javap Sex.class

注:javap,jdk自带的反汇编器(对class文件进行反汇编)

从反汇编的结果进行分析,可以得出如下结论:

a、用enum标志的枚举类默认继承了java.lang.Enum。

b、枚举类是一个final class,因此不能被其他类继承(枚举类是太监?)

c、中的Male和Female是Sex类的两个实例:

d、values()方法返回一个Sex数组

e、valueOf()方法以字符串作参数,返回一个Sex对象

 

2、对values()方法进行分析

输出:

总结:根据书写顺序把枚举常量序列变成一个枚举数组

注意:enum声明的类默认继承了Enum类,Enum类中没有values()这个方法。那么values()方法从哪来的呢?编译器添加的。

 

3、valueOf()方法:

输出:

输出:

总结:若存在和参数字符串同名的枚举常量,则返回这个枚举常量;否则报错。

 

4、编译器让每个枚举类都隐式继承了Enum,Enum的主要内容如下:

这里对name()和ordinal()这两个方法进行讲解:

1)name():返回枚举常量的名字(字符串)

输出:

2)ordinal():返回枚举常量的位序(即书写顺序,从0开始)

输出:

 

四、枚举的更多例子

1、Color枚举类:

public enum Color {    /**     * 下面定义了3个枚举常量     * 以Red(10,"红色")为例,它相当于public static final Color Red=new Color(10,"红色");     */    Red(10,"红色"),Green(20,"绿色"),Yellow(30,"黄色");    //下面自定义了两个属性,0到多个属性皆可    //一般来讲,枚举类的getter有意义,setter无意义    private int val;    private String msg;    //注:枚举类构造方法的默认访问修饰符是private,也只能是private,而不能是其他    Color(int val,String  msg){        this.val=val;        this.msg=msg;    }    public int getVal() {        return val;    }    public void setVal(int val) {        this.val = val;    }    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }}

 

2、测试:

public class Test {    public static void main(String[] args) {        //1、测试name()方法和ordinal()方法        System.out.println("1:"+Color.Red.name()+","+Color.Red.ordinal());        //2、测试values()方法        //println(c)相当于println(c.toString()),println(c.toString())又相当于c.name()        for(Color c:Color.values())System.out.println("2:"+c);        //3、测试valueOf()方法        Color c=Color.valueOf("Red");        System.out.println("3:"+c);        //4、测试自定义的val和msg        Color c2=Color.Green;        System.out.println("4:"+c2.getVal()+","+c2.getMsg());        //5、测试setter(没意义)和getter        //注意:枚举类都是单例的        Color.Red.setMsg("很红很红的那种");        System.out.println("5:"+Color.Red.getMsg());    }}

输出:

1:Red,0

2:Red
2:Green
2:Yellow
3:Red
4:20,绿色
5:很红很红的那种

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:https://liuxingchang.blog.csdn.net/article/details/116494214 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:#Java:switch @FDDLC
下一篇:#Java序列化、反序列化、Serializable、serialVersionUID @FDDLC

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月14日 05时23分33秒