Java基础之枚举类

118 阅读2分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。

枚举类型的定义

[修饰符] enum 枚举类型名 { [public static final]枚举成员; //只能写在第一行 其他成员; [private]构造方法 方法 }

  • 修饰符可以是public、private、internal
  • 枚举类型名有两层含义:一是作为枚举名使用;二是表示枚举成员的数据类型。枚举成员也称为枚举实例或枚举对象。
  • 枚举默认继承自java.lang.Enum类。
  • 创建枚举对象不能使用new( )运算符,而应直接将枚举成员赋值给枚举对象。

枚举类型的方法

  • 每个枚举类型的成员都可以看作是Enum类的实例,这些枚举成员默认被final public static修饰。
  • 访问枚举类型的成员 枚举名.枚举成员

枚举名.valueOf( 参数)

  • 因为枚举也是一种类,所以它具有与其他类几乎相同的特性,因此可以定义枚举的属性、构造方法以及方法。

枚举类常用方法 image.png


【例】定义一个枚举类型,然后输出枚举成员的名称和对应的序号。

enum Direction
{ EAST,SOUTH,WEST,NORTH }
public class EnumDemo{
  public static void main(String[] args)
  {
    Direction dir=Direction.EAST;
	System.out.print(dir);
	for(Direction d:Direction.values())
      System.out.println("序号:"+d.ordinal()+" 的值为"+d.name());
  }
}

EAST
序号:0 的值为EAST

序号:1 的值为SOUTH

序号:2 的值为WEST

序号:3 的值为NORTH


枚举在switch中的应用

  • 枚举类型有一个特别实用的特性,它可以在switch语句中使用。
  • java.time.DayOfWeek是一个枚举类型,其中包括一周的7天,分别为MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY和SUNDAY,序号从0到6。
  • EnumSwitch.java程序在switch结构中使用DayOfWeek枚举。

【例】 java.time.DayOfWeek是一个枚举类,一周7天,序号分别是0-6

import java.time.DayOfWeek;
public class EnumSwitch {
	 public static void describe (DayOfWeek day) {
	      switch (day) {
		     case MONDAY: 
	       System.out.println("Mondays are bad.");
			     break;
		     case FRIDAY: 
	    System.out.println("Fridays are better.");
			      break;
	         case SATURDAY:
		    case SUNDAY: 
	     System.out.println("Weekends are best.");
			       break;
 			       default:
	System.out.println("Midweek days are so-so.");
			    break;
	       }
	   }	     
public static void main(String[] args) {
	    	 DayOfWeek firstDay = DayOfWeek.MONDAY;
	         describe (firstDay);
	     DayOfWeek thirdDay = DayOfWeek.WEDNESDAY;
	         describe (thirdDay);
	      DayOfWeek seventhDay = DayOfWeek.SUNDAY;
	         describe(seventhDay); 
	    }
}

Mondays are bad.

Midweek days are so-so.

Weekends are best.


枚举类的构造方法

枚举的构造方法只是在构造枚举实例值时被调用。每一个枚举实例值都是枚举的一个对象,因此创建每个枚举实例时都需要调用该构造方法。


【例】 定义color枚举,包含四种颜色,声明两个private成员变量(name颜色名字、index索引)

package com;
public enum Color {
RED("红色", 1), GREEN("绿色", 2), WHITE("白色", 3), YELLOW("黄色", 4);
	   private String name;
	   private int index;
 	   private Color(String name, int index) {
	       this.name = name;
	       this.index = index;
	   }
 	   public static String getName(int index) {
	       for (Color c : Color.values()) {
	           if (c.getIndex() == index) {
	               return c.name;
	           }
	       }
		return null;
	   }
	   public String getName() {
	       return name;
	   }
 	   public void setName(String name) {
	       this.name = name;
	   }
	   public int getIndex() {
	       return index;
	   }
	   public void setIndex(int index) {
	       this.index = index;
	   }
	  @Override
	   public String toString() {
	       return this.name + "_" + this.index;
	   }
	   public static void main (String[] args) { 
	      Color c = Color.RED;          // 自动调用构造方法
	      System.out.println(c.toString());	// 输出:1-红色
	  }
	}

}