二十四、枚举

1、概述

1.1 引入

枚举在日常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是7天中的一个等。类似这种当一个变量有几种固定取值时,就可以将它定义为枚举类型

在JDK 1.5之前没有枚举类型,那时候一般用接口常量来替代。而使用Java枚举类型enum可以更贴近地表示这种常量。

1.2 定义枚举

声明枚举时必须使用enum关键字

格式:
权限修饰符 enum 枚举名称{
	枚举项1,枚举项2...;
}
/*枚举项之间用逗号分隔,最后使用分好结束*/

例如:
public enum Sex{
    GIRL,BOY;
}    

1.3 枚举使用

  • 通过枚举名直接引用枚举项即可;例如:Sex.BOY
  • 注意:每个枚举项都相当于枚举的对象!!!

2、枚举中的其他成分

2.1 枚举的本质

枚举其实本质上是一个类,每一个枚举项是本枚举类类型的一个对象。我们可以使用JDK提供的反编译命令,将枚举的字节码进行 查看。

  • 在CMD中找到字节码所在路径,然后执行:javac -p 字节码文件名

  • 我们以之前所写的Sex枚举为例,反编译后结果如下:

final class Sex extends java.lang.Enum<_Sex>{
    public static final Sex BOY;
    public static final Sex GIRL;
    public static final Sex[] $VALUES;
    
    // 将所有的枚举对象返回
    public static Sex[] values();
    // 根据枚举的常量名字符串,转换为枚举对象
    public static Sex valueOf(java.lang.String);
    
    private Sex(); //构造方法
    static {};     //静态代码块
}

由上得知:

  1. 枚举本质上就是最终类
  2. 枚举项,就是枚举类的对象,而且是静态的常量
  3. 有私有的构造方法
  4. 有静态代码块
  5. 继承 lang 包下的的 Enum

2.2 代码使用

public enum Sex{
    //枚举项,每一个枚举项都是此枚举的对象
    GIRL("女"),BOY("男");
    
    private String name;  //私有方法  
    
    //构造方法:注意只能是私有方法
    private Sex(){}
    //有参构造
    private Sex(String name){
        this.name = name;
    }
    
    //打印name变量值
    public String getSex(){
        return name;
    }
}
class EnumTest{
    public static void main(String args){
        Sex.BOY.getSex();  //男
        Sex.GIRL.getSex(); //女
    }
}

3、小结

  • 枚举类在第一行罗列若干个枚举对象。(多例)

  • 第一行都是常量,存储的是枚举类的对象。

  • 枚举是不能在外部创建对象的,枚举的构造器默认是私有的。

  • 枚举通常用于做信息的标志和分类。

posted @ 2021-06-23 15:43  火烧云Z  阅读(72)  评论(0)    收藏  举报