一.什么是枚举类
创建实例数量有限并且固定的类,例如季节类,只有4个对象春,夏,秋,冬。这在java就叫作枚举类。
二.怎样定义枚举类
package cn.com.java300.enumtest;
public class Enumtest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
Human MALE=Human.male;
System.out.println(MALE.toString());
//valueOf()方法,产生一个指定名称的类实例
Human FEMALE=Enum.valueOf(Human.class,"female");
System.out.println(FEMALE.toString());
//values()方法:返回该枚举类的所有实例
for(Human h:Human.vlues())
{
System.out.println(h);
}
}
}
enum Human{
male("男性", 100),
female("女性",99);
private final String name;
private final int age;
private Human(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return "name is"+this.name+"aver age is"+this.age;
}
}
2.需要注意的地方
a.枚举类可以实现一个或多个接口
b.使用enum定义,非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类
c.枚举类的构造器只能使用private访问控制符,如果未指定默认为private
d. 枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无需显示添加。
e.枚举类通常应该设计成不可变类,也就是说它的实例变量值不应该允许改变,这样会更安全,所以通常枚举类的实例变量都用private final修饰,然后在初始化枚举值时使用构造器为实例变量指定初始值。
3.常用方法
a.values(),valueOf()
值得注意的是对于声明为 enum 的类型,编译器会自动生成 一个继承 java.lang.Enum 的类,并且生成 valueOf ()和 values() 方法。
values()返回该枚举类的所有实例
valueOf ()产生该枚举类指定名称的类实例
可以参看http://www.oschina.net/question/869170_79647?sort=default&p=2
b.name()和toString()
两个都是返回枚举常量的名称,但是toString()更常用。
c.int ordinal()
返回枚举值在枚举类中的索引值(就是枚举值在枚举声明中的位置,第一个枚举值的索引值为0)