定义:
[修饰符] enum 类名
{
}
枚举类首先是一个类,所以大部分功能与一般类相同,下面几个不同点
a.枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远都不能产生实例。
列出这些实例时,系统会自动添加public static final修饰,无须程序员显式添加。
也就是在加载类时枚举类对象已经创建,并且不能改变。
因为是静态变量,所以可以通过类名.变量名方式访问。
b.枚举类构造方法只能够使用private访问控制符,如果省略了则默认使用private修饰
c.如果定义非抽象的枚举类,则默认使用final修饰,因此非抽象的枚举类不能够派生子类。
d.枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承java.lang.Enum类,而不是继承Object类。
e.枚举类可以有自己的属性、方法、构造方法等。
f.所有枚举类都提供一个values方法来遍历所有枚举值
public enum SeasonEnum
{
SPRING,SUMMER,FALL,WINTER;
}
for (SeasonEnum s:SeasonEnum.values())
{
System.out.println(s);
}
1、枚举类中定义成员变量
public enum Gender
{
MALE,FEMALE;
public String name;
}
public class GenderTest
{
public static void main(String[] args)
{
//通过Enum的valueOf方法来获取指定枚举类的枚举值
Gender g = Enum.valueOf(Gender.class, "FEMALE");
g.name = "女"; System.out.println(g+ "," + g.name);
}
}
2、枚举类中定义成员方法
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;
}
}
3、枚举类中定义构造方法
public enum Gender
{
MALE("男"),FEMALE("女");
privatefinal String name;
private Gender(String name)
{
this.name = name;
}
public String getName()
{
returnthis.name;
}
}
4、实现接口
public interface GenderDesc
{
void info();
}
public enum Gender implements GenderDesc
{
MALE("男"),FEMALE("女");
private final String name;
private Gender(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
@Override
public void info()
{
// TODO Auto-generated method stub
System.out.println("枚举类实现接口");
}
}
这种实现方式,导致每个枚举值调用方法时都有相同的功能,为了实现不同的功能如下:
public enum Gender implements GenderDesc
{
MALE("男")
{
@Override
public void info()
{
// TODO Auto-generated method stub
System.out.println("枚举类实现接口男");
}
}
,FEMALE("女")
{
@Override
public void info()
{
// TODO Auto-generated method stub
System.out.println("枚举类实现接口女");
}
};
private final String name;
private Gender(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
}
这种实现方式匿名内部类继承枚举类来实现的,枚举类包含了抽象方法,那么它一定是抽象类,系统会默认使用abstract来修饰类
5、使用抽象方法
public enum Gender
{
MALE("男")
{
@Override
public void info()
{
// TODO Auto-generated method stub
System.out.println("枚举类实现接口男");
}
}
,FEMALE("女")
{
@Override
public void info()
{
// TODO Auto-generated method stub
System.out.println("枚举类实现接口女");
}
};
public abstract void info();
private final String name;
private Gender(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
}
案例参考《JAVA疯狂讲义》