一文搞懂JAVA 枚举(enum)

 更新时间:2020年07月17日 16:33:39   作者:菜鸟教程  
这篇文章主要介绍了JAVA 枚举(enum)的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

例如定义一个颜色的枚举类。

enum Color 
{ 
  RED, GREEN, BLUE; 
} 

以上枚举类 Color 颜色常量有 RED, GREEN, BLUE,分别表示红色,绿色,蓝色。

使用实例:

enum Color
{
  RED, GREEN, BLUE;
}
 
public class Test
{
  // 执行输出结果
  public static void main(String[] args)
  {
    Color c1 = Color.RED;
    System.out.println(c1);
  }
}

执行以上代码输出结果为:

RED

内部类中使用枚举

枚举类也可以声明在内部类中:

public class Test
{
  enum Color
  {
    RED, GREEN, BLUE;
  }
 
  // 执行输出结果
  public static void main(String[] args)
  {
    Color c1 = Color.RED;
    System.out.println(c1);
  }
}

执行以上代码输出结果为:

RED

每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。

以上的枚举类 Color 转化在内部类实现:

class Color
{
   public static final Color RED = new Color();
   public static final Color BLUE = new Color();
   public static final Color GREEN = new Color();
}

迭代枚举元素

可以使用 for 语句来迭代枚举元素:

enum Color
{
  RED, GREEN, BLUE;
}
public class MyClass {
 public static void main(String[] args) {
  for (Color myVar : Color.values()) {
   System.out.println(myVar);
  }
 }
}

执行以上代码输出结果为:

RED
GREEN
BLUE

在 switch 中使用枚举类

枚举类常应用于 switch 语句中:

enum Color
{
  RED, GREEN, BLUE;
}
public class MyClass {
 public static void main(String[] args) {
  Color myVar = Color.BLUE;

  switch(myVar) {
   case RED:
    System.out.println("红色");
    break;
   case GREEN:
     System.out.println("绿色");
    break;
   case BLUE:
    System.out.println("蓝色");
    break;
  }
 }
}

执行以上代码输出结果为:

蓝色

values(), ordinal() 和 valueOf() 方法

enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口。

values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:

  • values() 返回枚举类中所有的值。
  • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
  • valueOf()方法返回指定字符串值的枚举常量。
enum Color
{
  RED, GREEN, BLUE;
}
 
public class Test
{
  public static void main(String[] args)
  {
    // 调用 values()
    Color arr[] = Color.values();
 
    // 迭代枚举
    for (Color col : arr)
    {
      // 查看索引
      System.out.println(col + " at index " + col.ordinal());
    }
 
    // 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException
    System.out.println(Color.valueOf("RED"));
    // System.out.println(Color.valueOf("WHITE"));
  }
}

执行以上代码输出结果为:

RED at index 0
GREEN at index 1
BLUE at index 2
RED

枚举类成员

枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。

枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。

enum Color
{
  RED, GREEN, BLUE;
 
  // 构造函数
  private Color()
  {
    System.out.println("Constructor called for : " + this.toString());
  }
 
  public void colorInfo()
  {
    System.out.println("Universal Color");
  }
}
 
public class Test
{  
  // 输出
  public static void main(String[] args)
  {
    Color c1 = Color.RED;
    System.out.println(c1);
    c1.colorInfo();
  }
}

执行以上代码输出结果为:

Constructor called for : RED
Constructor called for : GREEN
Constructor called for : BLUE
RED
Universal Color

以上就是一文搞懂JAVA 枚举(enum)的详细内容,更多关于JAVA 枚举(enum)的资料请关注脚本之家其它相关文章!

相关文章

  • spring boot 日志/页面处理、实体类构建、后台管理功能的实现

    spring boot 日志/页面处理、实体类构建、后台管理功能的实现

    这篇文章主要介绍了spring boot 日志/页面处理、实体类构建、后台管理功能的实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • mybatisplus中的xml对象参数传递问题

    mybatisplus中的xml对象参数传递问题

    这篇文章主要介绍了mybatisplus中的xml对象参数传递问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • springboot与dubbo的版本匹配问题

    springboot与dubbo的版本匹配问题

    这篇文章主要介绍了springboot与dubbo的版本匹配问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Mybatis Interceptor线程安全引发的bug问题

    Mybatis Interceptor线程安全引发的bug问题

    这篇文章主要介绍了Mybatis Interceptor线程安全引发的bug问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java实现Dijkstra算法的示例代码

    Java实现Dijkstra算法的示例代码

    Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。本文主要介绍了实现这一算法的Java代码,需要的可以参考一下
    2022-07-07
  • JDK19新特性使用实例详解

    JDK19新特性使用实例详解

    这篇文章主要为大家介绍了JDK19新特性使用实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • spring-boot List转Page的方法步骤

    spring-boot List转Page的方法步骤

    这篇文章主要介绍了spring-boot List转Page的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 详解java重载与覆写的区别

    详解java重载与覆写的区别

    很多同学会重载和重写分不清楚,这篇文章主要介绍了详解java重载与覆写的区别,有需要的朋友可以了解一下。
    2016-11-11
  • java获取中文拼音首字母工具类定义与用法实例

    java获取中文拼音首字母工具类定义与用法实例

    这篇文章主要介绍了java获取中文拼音首字母工具类定义与用法,结合实例形式分析了java获取中文拼音首字母工具类的具体定义、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-10-10
  • Java世界时区自动计算及时间生成方法详解

    Java世界时区自动计算及时间生成方法详解

    这篇文章主要为大家详细介绍了Java中世界时区自动计算及时间生成的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12

最新评论