Java之枚举类

Java之枚举类

定义:某些情况下,一个类的对象是有限且固定的,例如季节只有四个,一年只有12个月;

1.手动实现枚举类

设计方式:

  1. 构造器用private修饰
  2. 类中所有实例都用public static final修饰
class TestSeason{
     
 //把Season类定义成不可变的,将其属性也定义成final
 private final String name;
 private final String desc;
 public static final TestSeason SPRING = new TestSeason ("春天","趁春踏青");
 public static final TestSeason SUMMER = new TestSeason("夏天","夏日炎炎");
 public static final TestSeason FALL = new TestSeason ("秋天","秋风凉爽");
 public static final TestSeason WINTER = new TestSeason("冬天","围炉赏雪");
 public static TestSeason getTestSeason(int seasonNum){
     
  switch(seasonNum){
     
   case 1:
    return SPRING;
   case 2:
    return SUMMER;
   case 3:
    return FALL;
   case 4:
    return WINTER;
   default:
    return null;
  }
 }
//将构造器定义成private权限
 private TestSeason(String name,String desc){
     
  this.name = name;
  this.desc = desc;
 }
 //只为name和desc属性提供getter方法
 public String getName(){
     
  return this.name;
 }
 public String getDesc(){
     
  return this.desc;
 }
}

public class Season{
     
 public Season(TestSeason s){
     
  System.out.println(s.getName()+",这是一个"+s.getDesc()+"的季节");
 }
 public static void main(String[] args){
     
  new Season(TestSeason.FALL);
 }
}
 
2.enum关键字

J2SE1.5新增了enum关键字,用来定义枚举类。

  • 枚举类是一种特殊的类,它可以有自己的方法和属性,可以实现一个或多个接口,也可以定义自己的构造器。
  • 一个Java源文件中最多只能定义一个public修饰的枚举类,并且源文件必须和枚举类类名相同。
    特点
    1.枚举类可以实现一个或多个接口,用enum定义的枚举类默认继承Enum类而不是Object类。
    2.构造器只能用private修饰,不加的话系统默认private。
    3.所有实例必修显示列出,这些实例系统默认public static final修饰。
    4.所有枚举类都提供了values方法,可以很方便的遍历所有枚举值。

定义一个枚举类:

public enum SeasonEnum{
     
	SPRING,SUMMER,FALL,WINTER;
}

调用该枚举类的某个实例:

SeasonEnum.SPRING;

switch语句里的表达式可以是枚举值
switch表达式可以是枚举类对象

enum SeasonEnum{
     
 SPRING,SUMMER,FALL,WINTER;
}

public class TestEnum{
     
 public void judge(SeasonEnum s){
     
  switch(s){
     
   case SPRING:
    System.out.println("春暖花开");   
    break;                           
   case SUMMER:
    System.out.println("夏日炎炎");
    break; 
   case FALL:
    System.out.println("秋高气爽"); 
    break;     
   case WINTER:
    System.out.println("冬日雪飘");
    break; 
  }
 }
 public static void main(String[] args){
     
  for(SeasonEnum s:SeasonEnum.values()){
     
   System.out.println(s);
  }
  new TestEnum().judge(SeasonEnum.SPRING);
 }
}

输出结果:
在这里插入图片描述所有枚举类都继承了Enum类,所以都可以使用Enum的方法:

  • int compareTo(E o):与指定枚举对象比较顺序,只能与同类型的枚举实例比较,如果该枚举对象位于指定枚举对象后面,返回正整数,在指定之前,返回负整数,相等返回0;
  • String name():返回此枚举实例的名称。
  • int ordinal():返回枚举值在枚举类中的索引值,即在枚举声明中的位置,第一个索引值为0.
  • String toString():返回枚举常量名称。
  • public static >T valueOf(Class< T >enumType,Strng name):返回指定枚举类中的指定名称的枚举值。

你可能感兴趣的:(枚举类)