java枚举

208 阅读2分钟

一、java枚举

1.1、 基本认识

1.1.1、引入枚举

Java 5.0引入了枚举,枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类,也不能被继承。

例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。

class FreshJuice {
​
  enum FreshJuiceSize{ SMALL, MEDIUM , LARGE }
​
  FreshJuiceSize size;
​
}
​
​
public class FreshJuiceTest {
​
  public static void main(String []args){
​
   FreshJuice juice = new FreshJuice();
​
   juice.size = FreshJuice.FreshJuiceSize.MEDIUM  ;
​
  }
​
}

1.1.2、枚举的原理

(1)当我们创建枚举类型并编译后,jvm会创建一个相关的类(final修饰的类),而这个类就是一个普通class,并继承了java.lang.Enum类。

枚举不能继承其他类(单继承,已经有父类了),也不能被继承(final修饰))

(2)Enum类就使用静态代码块来生成final 和static 修饰的实例对象。并对实例赋予了两个方法 values()和valuesOf() 2.1 values();用于返回枚举类里的 所有实例 ,并保存在一个数据里并返回。 2.2 valuesOf(E e);返回该枚举类型指定名称的枚举值。

(3)Enum类内部会有一个构造函数,该构造函数只能有编译器调用。

1.1.3、枚举常用方法

image.png

1.1.4、枚举声明为什么是 Enum 不是 class

关于枚举类型,Oracle 官方给出的定义如下:

An enum type is a special data type that enables for a variable to be a set of predefined constants.

概括起来,枚举本质上就是常量类,只不过在语法上,JDK 那帮设计大佬们将关键字从 class 升级为了 Enum,这好比将 Abstract class 升级为 Interface 一样。只不过这次升级的幅度要大很多。枚举不仅简化了语法,提高代码可读性,更重要是做了很多常量类难以企及的事情。比如枚举允许定义方法。

举个例子,要表示交通信号灯的颜色状态,我们可以使用常量类:

 public class Color {
​
  public static final int RED = 0;
​
  public static final int GREEN = 1;
​
  public static final int YELLOW = 2;
​
  }

当然,我们也可以使用枚举:

 enum Color {  
    RED, GREEN, YELLOW  
​
  }

虽然使用枚举比较简洁,但使用常量类也很容易满足类似需求。但是,如果我们需要展示颜色的 Hex 和 RGB 值,该如何扩展呢?

这里稍微扩展一下 Color,增加 Hex 和 RGB 两个属性。

 public enum Color {
​
  RED("#FF0000", "255,0,0"),
​
  GREEN("#00FFFF", "0,255,255"),
​
  YELLOW("#FFFF00", "255,255,0");
​
  String hex, rgb;
​
  Color(String hex, String rgb) {
​
    this.hex = hex;
​
    this.rgb = rgb;
​
  }
​
   }

(1)查询红色的 HEX 值

System.out.println(Color.RED.hex);

(2)查询绿色的 RGB 值

System.out.println(Color.GREEN.rgb);

\