> 文章列表 > Java -枚举的使用

Java -枚举的使用

Java -枚举的使用

一、背景及定义

枚举是在JDK1.5以后引入的。主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式:

public static int final RED = 1;
public static int final GREEN = 2;
public static int final BLACK = 3;

但是常量举例有不好的地方,例如:可能碰巧有个数字1,但是他有可能误会为是RED,现在我们可以直接用枚举
来进行组织,这样一来,就拥有了类型,枚举类型。而不是普通的整形1

public enum TestEnum {RED,BLACK,GREEN;
}
  • 优点:将常量组织起来统一进行管理
  • 场景:错误状态码,消息类型,颜色的划分,状态机等等…
  • 本质:是 java.lang.Enum 的子类,也就是说,自己写的枚举类,就算没有显示的继承 Enum ,但是其默认继承了这个类。

二、枚举类的创建

Java -枚举的使用

public enum TestEnum {RED,BLACK,GREEN;
}

三、枚举类的使用

3.1、调用枚举中的量

Java -枚举的使用

3.2、switch 语句

Java -枚举的使用

3.3、枚举类的常用方法

方法名称 描述
values() 以数组形式返回枚举类型的所有成员
ordinal() 获取枚举成员的索引位置
valueOf() 将普通字符串转换为枚举实例
compareTo() 比较两个枚举成员在定义时的顺序

3.3.1、values() – 以数组形式返回枚举类型的所有成员

Java -枚举的使用

3.3.2、ordinal() 获取枚举成员的索引位置

Java -枚举的使用

3.3.3、valueOf() 将普通字符串转换为枚举实例

Java -枚举的使用

3.3.4、compareTo() 比较两个枚举成员在定义时的顺序

Java -枚举的使用

3.4、枚举对象

Java -枚举的使用

四、枚举优缺点

优点:

  1. 枚举常量更简单安全 。
  2. 枚举具有内置方法 ,代码更优雅

缺点:
3. 不可继承,无法扩展,【从构造的方法的私有性就能看出来】

五、枚举和反射

枚举是否可以通过反射,拿到实例对象呢? -这道题是2017年阿里巴巴曾经问到的一个问题题

篇博文反射说到:任何一个类,哪怕其构造方法是私有的,我们也可以通过反射拿到它的实例对象,那么枚举的构造方法也是私有的,我们是否可以拿到呢?接下来,我们来实验一下:
Java -枚举的使用

六、总结

  • 1、枚举 将常量组织起来统一进行管理,更简单安全。
  • 2、枚举本身就是一个类,其构造方法默认为私有的,且都是默认继承于 java.lang.Enum
  • 3、 枚举可以避免反射和序列化问题:枚举类非常安全!
  • 4、不可继承,无法扩展。
  • 5、枚举具有内置方法 ,代码更优雅