在枚举类型中使用枚举类型(包括方法)和构造函数。

枚举

枚举是一种类型(类或接口) ,它表示一个固定的值列表(您可以将其视为常量)。

public enum Volume {
    HIGH, MEDIUM, LOW
}
  • 枚举中的这些值是“常量”(它们是隐式的 public、 static 和 final) ,因此遵循了使用所有大写的约定
  • 不能使new关键字来获得枚举的引用,而是直接获得引用
Volume level = Volume.LOW;
  • 也可以从一个字符串中得到一个枚举
Volume level = Volume.valueOf("LOW");
  • 获得特定类型的所有枚举
for(Volume v: Volume.values()) {
   System.out.print(v.name() + ", ");
}

其返回一个枚举数组,其声明顺序与方法值相同

  • 枚举类型不能extends类,因为所有枚举都隐式地从 java.lang.Enum 扩展。只能implement接口
public enum Volume implements AnInterface { ... }
  • 在使用枚举类时,如果枚举重写了枚举类方法,则使用的是重写后的方法,且如果枚举类有抽象方法,则枚举必须要实现该抽象方法,否则编译报错
public enum Volume {
    HIGH(100) {
        @Override
        public void printValue() {
            System.out.println("** Highest value**");
        }
        @Override
        public void printDescription() {
            System.out.println("High Volume");
        }
    }, MEDIUM(50) {
        @Override
        public void printDescription() {
            System.out.println("Medium Volume");
        }
    }, LOW(20) {
        @Override
        public void printDescription() {
            System.out.println("Low Volume");
        }
    };
    private int value;

    private Volume(int value) {
        this.value = value;
    }

    public void printValue() {
        System.out.println(value);
    }
    public abstract void printDescription();
}

枚举是单例的

  • 不能通过使用new创建枚举实例(因为构造函数是private)
  • 当第一次引用枚举时,将创建枚举的实例
  • enums 默认是线程安全的(这意味着在创建 enums 时不需要进行双重检查)
  • 在大多数情况下,枚举是在 Java 中实现单例设计模式的最佳方式

这个家伙很懒,啥也没有留下😋