java基础-枚举类

2024-03-07

本质也是一种类,只不过这个类的对象是有限的、固定的几个,不能让用户随意创建

定义

jdk5.0之前

class Season {
  private final String name;
  private final String desc;
  // 私有化类的构造器
  private Season(String name,String desc) {
      this.name = name;
      this.desc = desc;
  }
  public String getName() {return name;}
  public String getDesc() {return desc;}
  // 创建当前类的实例,需要使用public static final修饰
  public static final Season SPRING= new Season ("春","春");
  public static final Season SUMMER= new Season ("夏","夏");
  public static final Season AUTUMN = new Season ("秋","秋");
  public static final Season WINTER = new Season ("冬","冬");
}
class A {
     public void show() {
          System.out.print(Season.SPRING);
     }
}

jdk5.5及之后

使用关键字enum定义的枚举类,默认继承了java.lang.Enum

enum Season {
  // 必须在枚举类的开头声明多个对象,对象之间使用,隔开
  SPRING("春","春"),
  SUMMER("夏","夏"),
  AUTUMN("秋","秋"),
  WINTER("冬","冬");

  // 声明当前类的对象的实例变量,使用private final修饰
  private final String name;
  private final String desc;
  // 私有化类的构造器
  private Season(String name,String desc) {
      this.name = name;
      this.desc = desc;
  }
  public String getName() {return name;}
  public String getDesc() {return desc;}
}
class A {
     public void show() {
          System.out.print(Season.SPRING);
     }
}

使用enum定义枚举类,当枚举常量不存在成员变量时

enum Season{
  SPRING,SUMMER,AUTUMN,WINTER;
}

java.lang.Enum常用方法

// 	默认返回常量的名称(对象名)。可以手动重写
toString()

//	返回枚举类型的对象数组,是一个静态方法

values()

//	可以把一个字符串转换为对应的枚举类对象,要求字符串必须是枚举类对象的“名字”,是一个静态方法
//	当前枚举类中不存在名字为name的对象,则报错
valueOf(String name)

//	得到当前枚举类常量的名称,建议优先使用toString()
name()

//	返回当前枚举常量的次序号,默认从0开始
ordinal()

允许实现接口

第一种情况:在枚举类中重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时,执行的是同一个方法

interface Info{
	void show();
}
enum Season implements Info {
	public void show() {

	}
}

第二种情况:让枚举类中每一个对象重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时,执行的是同一个方法

interface Info{
	void show();
}
enum Season implements Info {
  // 必须在枚举类的开头声明多个对象,对象之间使用,隔开
  SPRING("春","春") {
  		public void show() {

	}
  },
  SUMMER("夏","夏") {
  		public void show() {

	}
  },
  AUTUMN("秋","秋") {
  		public void show() {

	}
  },
  WINTER("冬","冬") {
  		public void show() {

	}
  };
  private final String name;
  private final String desc;
  private Season(String name,String desc) {
      this.name = name;
      this.desc = desc;
  }
  public String getName() {return name;}
  public String getDesc() {return desc;}
}

枚举类实现单例

jdk5.0之前

class Bank{
	private Bank(){}
	public static final Bank instance = new Bank();
}

jdk5.0及之后

// 情况1
enum Bank{
	CPB;
}

// 情况2
enum Bank{
	CPB("银行");
	private final String name;
	private Bank(String name) {
	    this.name = name;
	}
}


{/if}