在实际编程中,有时会需要一些固定的数量有限的数据集合,例如周一到周日,春夏秋冬四个季节,这时候就需要用到Java中的枚举类型。枚举类型用enum修饰,除了不能继承自一个enum外,基本上可以将它看作一个类,而其中所枚举的常量可以看做是这个类的相应实例。下面结合代码说明下枚举的具体用法。
/**
* 枚举用法详解
*
* @author JavaSheng
*
*/
public class TestEnum {
/**
* 最简单的枚举
*/
public enum Season{
SPRING, SUMMER, AUTUMN, WINTER;
}
/**
* 带有成员变量和方法的枚举
*/
public enum Color{
RED, GREEN, BLUE;//枚举常量必须在枚举开头声明
private static final String DEFAULT_COLOR = "WHITE";
public static boolean isDefault(String color){
if(DEFAULT_COLOR.equals(color))
return true;
else
return false;
}
}
/**
* 带有构造器的枚举
*/
public enum Size{
SMALL("S"), MEDIUM("M"),LARGE("L");
//此种带参数的枚举必须定义相应的构造器,参数可任意多个
//必须做到统一,即要带参数就都带,要不就都不带
//方法必须在实例之后
private String size;
//构造器必须为包访问或私有类型
Size(String size){
this.size = size;
}
public String getSize(){
return size;
}
}
/**
* 带有抽象方法的枚举
*/
public enum Status{
OFF{
public String getStatus(){
return "关";
}
},
ON{
public String getStatus(){
return "开";
}
};
//此种形式必须定义抽象方法
public abstract String getStatus();
}
public static void main(String[] args){
Season season = Season.AUTUMN;
switch(season){
case SPRING:
System.out.println("Now is spring");
break;
case SUMMER:
System.out.println("Now is summer");
break;
case AUTUMN:
System.out.println("Now is autumn");
break;
case WINTER:
System.out.println("Now is winter");
break;
}
System.out.println(Color.isDefault("WHITE"));
Size s = Size.LARGE;
System.out.println(s.getSize());
Status st = Status.OFF;
System.out.println(st.getStatus());
//枚举类型中还有一些其他的静态非静态方法
//toString() 返回枚举常量名
String sizeName = Size.LARGE.toString();
System.out.println(sizeName);
//静态values方法,返回包含所有枚举常量的数组
//编译器创建的enum类都继承自Enum类,但是Enum类中没有values方法,所有values方法是编译器添加的
Size[] sValue = Size.values();
for(int i = 0; i < sValue.length; i++){
System.out.print(sValue[i].getSize()+ ",");
}
System.out.println();
//还可以通过getEnumConstants方法获得enum常量
Enum e = Size.MEDIUM;
for(Enum en : e.getClass().getEnumConstants())
System.out.println(en);
//ordinal() 返回枚举常量位置,从零计数
Size s1 = Size.MEDIUM;
System.out.println(s1.ordinal());
//valueOf 将字符串转化为枚举类型,但必须是已存在于枚举常量中
Size s2 = Enum.valueOf(Size.class, "SMALL");
System.out.println(s2);
}
}
运行结果 :