Java开发指南 | 第三十篇】Java 枚举(enum)

简介: Java开发指南 | 第三十篇】Java 枚举(enum)

Java 枚举(enum)

枚举(Enumeration)是一种特殊的数据类型,用于表示一组具名的常量集合,例如表示星期几、月份、颜色等。


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


枚举类的声明

在类外声明枚举类:


enum color{
  orange,green,grey,pink,blue;
}
public class Ice{
    public static void main(String[] args) {
      color i=color.blue;
      System.out.println(i);
    }
}



在内部类中声明枚举类:


public class Ice{
  enum color{
  orange,green,grey,pink,blue;
  }
    public static void main(String[] args) {
      color i=color.blue;
      System.out.println(i);
    }
}



迭代枚举元素

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


public class Ice{
  enum color{
  orange,green,grey,pink,blue;
  }
    public static void main(String[] args) {
      for(color i:color.values())
      System.out.println(i);
    }
}



在 switch 中使用枚举类

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


public class Ice{
  enum color{
  orange,green,grey,pink,blue;
  }
    public static void main(String[] args) {
      color ice=color.blue;
      switch(ice)
      {
      case orange:
      System.out.println("橙色");
      break;
      case green:
      System.out.println("绿色");
      break;
      case blue:
      System.out.println("蓝色");
      break;
      default:
      break;
      }
    }
}




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

在应用枚举类时,常使用values(), ordinal() 和 valueOf() 三种方法。


1、values() 返回枚举类中所有的值。


2、ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。


3、valueOf()方法返回指定字符串值的枚举常量。


public class Ice{
  enum color{
  orange,green,grey,pink,blue;
  }
    public static void main(String[] args) {
      //调用 values()
      color[] ice = color.values();
    
      //迭代枚举
      for(color col:ice)
      {
      //查看索引
      System.out.println(col+" at index "+col.ordinal());
      }
    
      //返回枚举常量
      System.out.println(color.valueOf("blue"));
      //若不存在,则报错 IllegalArgumentException 
      System.out.println(color.valueOf("red"));
    }
}




枚举类成员

枚举跟普通类一样可以用自己的变量、方法和构造函数。


其中构造函数只能使用 private 访问修饰符,所以外部无法调用,因此只能通过枚举定义的常量来访问。


示例如下:
enum Direction {
    NORTH("North"),
    EAST("East"),
    SOUTH("South"),
    WEST("West");
    private String name;
    // 构造函数是私有的,只能在枚举内部使用
    private Direction(String name) {
        this.name = name;
    }
    // 获取方向名称
    public String getName() {
        return name;
    }
}
public class Ice {
    public static void main(String[] args) {
        Direction north = Direction.NORTH;
        System.out.println("Name: " + north.getName());
    }
}



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


目录
相关文章
|
8天前
|
Java ice
【Java开发指南 | 第二十八篇】Java封装
【Java开发指南 | 第二十八篇】Java封装
12 0
|
8天前
|
Java 编译器
【Java开发指南 | 第二十六篇】Java多态
【Java开发指南 | 第二十六篇】Java多态
16 1
|
8天前
|
Java
【Java开发指南 | 第二十一篇】Java流之文件
【Java开发指南 | 第二十一篇】Java流之文件
15 0
|
8天前
|
存储 Java 编译器
【Java开发指南 | 第八篇】Java变量、构造方法、创建对象
【Java开发指南 | 第八篇】Java变量、构造方法、创建对象
19 3
|
8天前
|
存储 Java
【Java开发指南 | 第七篇】静态变量生命周期、初始化时机及静态变量相关性质
【Java开发指南 | 第七篇】静态变量生命周期、初始化时机及静态变量相关性质
19 4
|
1天前
|
Java Spring
【JAVA学习之路 | 提高篇】(枚举类)及其实现
【JAVA学习之路 | 提高篇】(枚举类)及其实现
|
8天前
|
Java
【Java开发指南 | 第三十一篇】Java 包(package)
【Java开发指南 | 第三十一篇】Java 包(package)
13 1
|
8天前
|
Java ice
【Java开发指南 | 第二十九篇】Java接口
【Java开发指南 | 第二十九篇】Java接口
10 0
|
8天前
|
Java
【Java开发指南 | 第二十七篇】Java抽象类
【Java开发指南 | 第二十七篇】Java抽象类
15 0
|
8天前
|
Java
【Java开发指南 | 第二十五篇】Java 重写(Override)与重载(Overload)
【Java开发指南 | 第二十五篇】Java 重写(Override)与重载(Overload)
12 1