Skip to content

枚举

枚举是引用数据类型,由一组固定的常量组成的类型。

枚举,也可以称为枚举类。

基本使用

查询 JDK 文档 搜索 Enum

枚举类使用 enum 修饰,所有的枚举类都默认继承 java.lang.Enum类。

所以我们自定义的枚举类,不能继承其他类,但是可以实现接口。

枚举类不能 new 对象。

枚举类中默认书写的内容全部为:全局静态常量 public static final修饰的值。(全部大写)

枚举类的使用示例:枚举类型是值类型的常量作为属性。

java
package com.enumPart.Test02;

/**
 *  枚举类使用enum修饰,所有的枚举类都默认继承自java.lang.Enum类。
 *  所以我们自定义的枚举类,不能继承其他类,但是可以实现接口。
 *  枚举类不能new对象。
 *  枚举类中默认书写的内容全部为:全局静态常量 public static final 修饰的值。
 */

// 定义枚举类
public enum Gender {
    // 全局静态常量
    MALE,FEMALE
}
java
package com.enumPart.Test02;

public class Student {
    // 定义 私有属性
    private String sex;
    // 使用 自定义枚举类型
    private Gender gender;

    public static void main(String[] args) {
        // 创建 对象
        Student stu = new Student();
        // 赋值
        stu.sex = "hello";
        // 只能在 Gender 枚举类的 静态常量中 选择
        stu.gender = Gender.MALE;
    }
}

枚举类的使用示例2:枚举类型是一个对象类型的常量作为属性。

枚举类的构造方法不能写 public,默认是私有的 private。

java
package com.enumPart.Test01;

// 枚举类实现接口
public enum Employee implements Work{
    // ";" 之前表示 枚举类 表示常量的位置
    // 创建一个 枚举类型对象 常量 作为 枚举类属性
    CEO("001","总裁","aqua"), // 相当于 new CEO();调用有参构造方法
    CTO("002","总监","sakuna"), // 相当于 new CEO();调用有参构造方法
    MANAGE("003","经理","yousa")
    ;
    // 定义属性
    private String id; // 编号
    private String job; // 职位
    private String name; // 名称

    // 封装
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 无参构造方法,默认使用private修饰,默认不写就是私有的,所以不能new对象
    Employee() {
    }

    // 有参构造方法,默认使用private修饰,默认不写就是私有的,所以不能new对象
    Employee(String id, String job, String name) {
        this.id = id;
        this.job = job;
        this.name = name;
    }

    // 实现这个接口
    @Override
    public void doWork() {
        System.out.println(name+"在工作");
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id='" + id + '\'' +
                ", job='" + job + '\'' +
                ", name='" + name + '\'' +
                '}';
    }

    // 根据员工ID返回员工员工对象
    public static Employee getEmployeeById(String employeeId){
        // 使用 values() 方法,得到枚举类属性数组
        Employee[] values = Employee.values();
        // 遍历枚举类中的属性
        for (int i = 0; i < values.length; i++) {
            // 查找id一样的 返回这个 属性对象
            if (employeeId.equals(values[i].getId())){
                return values[i];
            };
        }
        // 没有找到则返回空
        return null;
    }
}
java
package com.enumPart.Test01;

// 定义抽象类
public interface Work {
    // 抽象方法
    void doWork();
}
java
package com.enumPart.Test01;

public class TestEnum01 {
    public static void main(String[] args) {
        // 枚举类不能创建对象,只能通过静态方法调用。
        Employee employee = Employee.getEmployeeById("002");
        System.out.println(employee); // Employee{id='002', job='总监', name='sakuna'}

        // 使用枚举类对象
        Employee cto = Employee.CTO;
        System.out.println("cto = " + cto); // cto = Employee{id='002', job='总监', name='sakuna'}

        // 枚举类对象 调用接口中实现的方法
        cto.doWork(); // sakuna在工作

    }
}

方法

Enum.values()

java
作用:枚举类自带这个方法,用于将本类中的所有属性(本类中的常量属性),转化为一个数组。此方法属于静态方法。
返回具有指定名称的指定枚举类型的枚举常量(JDK1.8);
参数:无
    
返回值:一个数组
    
示例:
    
Employee[] values = Employee.values();
每个元素是 枚举类中的常量。