public enum SeasonEnum
{
SPRING,SUMMER,FALL,WINTER;
}
使用枚举类,可使用EnumClass.variable,如SeasonEnum.SPRING
public class TestEnum
{
public void judge(SeasonEnum s)
{
//switch语句里的表达式可以是枚举值
switch(s)
{
case SPRING :
System.out.println("");
break;
case SUMMER:
System.out.println("");
break;
case FALL:
System.out.println("");
break;
case WINNER:
System.out.println("");
break;
}
}
public static void main(String[] args)
{
//所有枚举类都有一个values方法,返回该枚举类的所有实例
for(SeasonEnum s: SeasonEnum.values())
{
System.out.println(s);
}
//平常使用枚举实例时,总是通过EnumClass.variable形式来访问
new TestEnum().judge(SeasonEnum.SPRING);
}
}
java.lang.Enum的方法
a: int compareTo(E o):用于与指定枚举队相比较顺序。
b: String name():返回枚举实例的名称,优先使用toString()方法
c: int ordinal():返回枚举类中的索引值。
d:String toString(): 返回枚举常量的名称。
e:public static <T extends Enum<T>>T valueOf(Class<T>enumType,String name):返回指定枚举类中指定名称的枚举值。
枚举类的实例只能是枚举值,而不能随意的通过new来创建枚举类对象。
public enum Gender
{
MALE,FEMALE;
private String name;
public void setName(String name)
{
switch (this)
{
case MALE:
if (name.equals("男"))
{
this.name = name;
}
else
{
System.out.println("参数错误");
return;
}
break;
case FEMALE:
if (name.equals("女"))
{
this.name = name;
}
else
{
System.out.println("参数错误");
return;
}
break;
}
}
public String getName()
{
return this.name;
}
}
public class TestGender
{
public static void main(String[] args)
{
Gender g = Enum.valueOf(Gender.class , "FEMALE");
g.setName("女");
System.out.println(g + "代表:" + g.getName());
g.setName("男");//试图将一个FAMALE设置成"男“,错误
System.out.println(g + "代表:" + g.getName());
}
}
枚举通常设计成不可变类,属性不允许修改。
public enum Gender
{
//此处的枚举值必须调用对应构造器来创建
MALE("男"),FEMALE("女");//等同于public static final Gender MALE = new Gender("男"),public static final Gender MALE = new Gender("女")
private String name;
//枚举类的构造器只能使用private修饰
private Gender(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
}
包含抽象方法的枚举类
public enum Operation2
{
PLUS
{
public double eval(double x , double y)
{
return x + y;
}
},
MINUS
{
public double eval(double x , double y)
{
return x - y;
}
},
TIMES
{
public double eval(double x , double y)
{
return x * y;
}
},
DIVIDE
{
public double eval(double x , double y)
{
return x / y;
}
};
//为枚举类定义一个抽象方法,这个抽象方法由不同枚举值提供不同的实现
public abstract double eval(double x, double y);
public static void main(String[] args)
{
System.out.println(Operation.PLUS.eval(3, 4));
System.out.println(Operation.MINUS.eval(5, 4));
System.out.println(Operation.TIMES.eval(5, 4));
System.out.println(Operation.DIVIDE.eval(5, 4));
}
}
枚举类里定义抽象方法时无须显示使用abstract 关键字将枚举定义成抽象类,但因为枚举类需要显示创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则将出现编译错误。