Java——枚举

一、概念

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

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

二、定义

声明枚举时必须使用enum关键字,语法如下

权限修饰符 enum 枚举名称{
   枚举成员1,
   枚举成员2,
   ...;
}

// 枚举成员之间使用逗号分隔,最后使用分号结束

例子

// 使用枚举描述性别数据
public enum Sex {
    GIRL,
    BOY;
}

三、使用

通过枚举类型名直接引用常量即可,例如Sex.BOY、Sex.GRIL

public class Test {
    public static void main(String[] args) {
        System.out.println(Sex.BOY);   // BOY
        System.out.println(Sex.GIRL);   // GIRL
    }
}

四、分析枚举

  • 枚举本质上就是最终类
  • 枚举常量,就是枚举类的对象,而且是静态的常量
  • 有私有的构造方法
  • 静态代码

五、枚举中的其他成员

枚举类型也是属于类,允许定义其他成分,比如构造器、成员方法、成员变量等。但是定义的成分一定要在枚举实例之后,而且最后一个枚举实例必须要有分号结束。

比如

public enum Sex {
    BOY("男孩"),
    GIRL;

    // 成员变量
    private String msg;

    // 构造方法,必须私有
    private Sex(){}

    private Sex(String msg){
        this.msg = msg;
    }

    // 成员方法
    public void show(){
        System.out.println(msg);
    }
}
  1. GIRL对象就是由无参构造方法创建的
  2. BOY是有参构造方法创建的
  3. 构造方法权限一定是私有的,即使省略也是private权限。
  4. show方法可以直接用枚举实例调用:Sex.BOY.show();

六、枚举的使用例子

性别的案例

// Sex.java
public enum Sex {
    BOY("男孩"),
    GIRL;

    // 成员变量
    private String msg;

    // 构造方法,必须私有
    private Sex(){}

    private Sex(String msg){
        this.msg = msg;
    }

    public String getMsg(){
        return this.msg;
    }

    // 成员方法
    public void show(){
        System.out.println(msg);
    }
}

// Test.java
public class Test {
    public static void main(String[] args) {
        String sex = Sex.BOY.getMsg();
        System.out.println(sex);   // 男孩
    }
}

季节的案例

// Season.java
public enum Season {
    SPRING("春天"),
    SUMMER("夏天"),
    AUTUMN("秋天"),
    WINTER("冬天");

    private String type;

    Season() {
    }

    Season(String type) {
        this.type = type;
    }

    @Override
    public String toString(){
        return type;
    }
}

// Test.java
public class Test {
    public static void main(String[] args) {
        Season sea = Season.SUMMER;
        System.out.println(sea);   // 夏天
    }
}

七、小结

  • 枚举本质上是一个final类,继承了Enum类
  • 枚举是一个类,可以类中定义成员,比如成员变量、构造方法、成员方法等
  • 枚举中的构造方法是私有的,外界无法调用,只能定义枚举常量的时候使用
  • 枚举中的实例方法可以直接用枚举常量调用

  

 

posted @ 2021-05-13 15:39  徐林俊  阅读(323)  评论(0编辑  收藏  举报