Java进阶之枚举

简介: Java进阶之枚举

Java进阶之枚举
在Java中,我们通常使用 public static final 变量来定义常量,用来声明一些常用而又不会改变的值。
而在Java5中,又提供了一种更加结构化和安全的方式来定义和使用一组固定的常量,那就是枚举。
什么是枚举?
ava 枚举(Enum)是 Java 5 中引入的一个新特性,它是一种特殊的类,可以包含一组固定的常量。枚举用于表示一组固定的值,如星期、月份、状态等。在 Java 中,枚举使用关键字 enum 定义,可以包含方法和变量,也可以实现接口。

  定义枚举
  枚举的定义非常简单,使用关键字 enum,后面跟着枚举的名称和大括号包含的枚举值。
  例如,定义一个表示星期的枚举:
  public enum Weekday {
      MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
  }
  美剧的值一般要大写,和常量一样。

  使用枚举
  使用枚举时,可以直接使用枚举名称调用枚举值。例如,获取星期一的枚举值:
  Weekday monday = Weekday.MONDAY;

  枚举的原理
  枚举实际上是继承自 java.lang.Enum 类的一个特殊类。在编译时期,枚举会被编译成一个final类,该类继承自 java.lang.Enum。
  每个枚举值都是一个 public static final 的实例,这些实例是通过静态代码块创建的。
  例如,上面的 Weekday 枚举在编译后可能如下:
  public final class Weekday extends Enum<Weekday> {
      public static final Weekday MONDAY;
      public static final Weekday TUESDAY;
      public static final Weekday WEDNESDAY;
      public static final Weekday THURSDAY;
      public static final Weekday FRIDAY;
      public static final Weekday SATURDAY;
      public static final Weekday SUNDAY;
      static {
          MONDAY = new Weekday();
          TUESDAY = new Weekday();
          WEDNESDAY = new Weekday();
          THURSDAY = new Weekday();
          FRIDAY = new Weekday();
          SATURDAY = new Weekday();
          SUNDAY = new Weekday();
      }
  }
  由此可见,枚举其实是一个多例模式!
  多例模式(Multiton Pattern)是一种设计模式,它扩展了单例模式的概念。
  在单例模式中,一个类只有一个实例,并且提供一个全局访问点来获取这个实例。
  在多例模式中,一个类可以有多个实例,但是实例的数量是有限的,并且通常也是预先定义好的。
  以后学习设计模式的时候再仔细学习!

  枚举可以包含方法和变量,这些方法和变量可以在枚举的实例中使用。
  例如,给Weekday枚举添加一个获取中文星期名称的方法:
  public enum Weekday {
      MONDAY("星期一"), 
      TUESDAY("星期二"), 
      WEDNESDAY("星期三"), 
      THURSDAY("星期四"), 
      FRIDAY("星期五"), 
      SATURDAY("星期六"), 
      SUNDAY("星期日");
      private String chineseName;
      Weekday(String chineseName) {
          this.chineseName = chineseName;
      }
      public String getChineseName() {
          return chineseName;
      }
  }
  枚举包含变量和方法时,使用的是有参构造,所以定义的枚举值就必须加上参数。

  实现接口枚举可以实现接口,但是不能继承其他类(因为已经继承了 java.lang.Enum 类)。
  例如,给 Weekday 枚举实现一个 Describe 接口,用于描述枚举值:
  public interface Describe {
      String describe();
  }
  public enum Weekday implements Describe {
      MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日");
      private String chineseName;
      Weekday(String chineseName) {
          this.chineseName = chineseName;
      }
      @Override
      public String describe() {
          return "今天是" + chineseName;
      }
  }

  比如在日常开发中编写一个获取响应状态和提示信息的枚举类:
  // 定义接口
  public interface ResponseStatusInterface {
      int getStatusCode();
      String getMessage();
  }
  // 实现接口的枚举类
  public enum ResponseStatus implements ResponseStatusInterface {
      SUCCESS(200, "操作成功"),
      FAILURE(400, "操作失败"),
      UNAUTHORIZED(401, "未授权"),
      FORBIDDEN(403, "禁止访问"),
      NOT_FOUND(404, "资源未找到"),
      INTERNAL_SERVER_ERROR(500, "服务器内部错误");
      private final int statusCode;
      private final String message;
      ResponseStatus(int statusCode, String message) {
          this.statusCode = statusCode;
          this.message = message;
      }
      @Override
      public int getStatusCode() {
          return statusCode;
      }
      @Override
      public String getMessage() {
          return message;
      }
  }
  // 使用示例
  public class Main {
      public static void main(String[] args) {
          // 获取一个枚举值
          ResponseStatus status = ResponseStatus.SUCCESS;
          // 打印状态码和提示信息
          System.out.println("Status Code: " + status.getStatusCode());
          System.out.println("Message: " + status.getMessage());
      }
  }
  END
目录
相关文章
|
1月前
|
安全 Java
Java进阶之枚举
【7月更文挑战第11天】Java枚举是Java 5引入的特性,用于定义固定常量集合,如星期。枚举是继承自`java.lang.Enum`的特殊类,编译后成为final类,每个枚举值是静态final实例。定义枚举用`enum`关键字,如`public enum Weekday {MONDAY, TUESDAY, ...}`。枚举可包含方法和变量,能实现接口但不能继承其他类。例如,`Weekday`枚举可实现`Describe`接口,提供`describe()`方法。在实际应用中,枚举常用于表示如响应状态等固定选项,便于类型安全和代码阅读。
26 8
|
3月前
|
Java
Java枚举简述
Java枚举简述
22 0
|
10月前
|
Java
java枚举
Java中的枚举是一种特殊的类,它只能包含常量,并且不能继承其他类。枚举可以用来代替传统的常量定义方式,即将常量封装在类或接口中。 以下是一个简单的Java枚举的例子: public enum Color { RED, GREEN, BLUE } 在这个例子中,我们定义了一个名为Color的枚举,它包含三个常量:RED、GREEN和BLUE。你可以像使用普通类一样使用这个枚举: Color myColor = Color.RED; System.out.println(myColor); 在这个例子中,我们创建了一个名为myColor的变量,并将其设置为Color枚举中的RED常量。然后我们打
43 0
|
Java
Java枚举
什么是枚举? 枚举是一种特殊的数据类型,用于定义具有固定个数的常量集。它可以帮助我们更好地管理常量,使代码更易于阅读和维护。 Java枚举是一种高效、可读性强的常量管理方式,它可以使代码更易于维护和扩展。使用Java枚举可以帮助我们有效地组织常量,并将其用于多种场景,提高代码的易用性和可重用性。
60 0
|
Java 编译器 API
Java8 ChronoUnits枚举
Java8 ChronoUnits枚举
53 0
|
Java
Java中常量基础知识
Java中常量基础知识
63 0
|
存储 安全 Java
【Java面试】枚举从使用到原理
【Java面试】枚举从使用到原理
131 0
【Java面试】枚举从使用到原理
|
Java
Java枚举2
Java枚举2
90 0
Java枚举2
|
Java
Java中的枚举认识介绍
Java中的枚举认识介绍
70 0