枚举是个好东西,前段时间因为需要命名一种常量连续分布的数据结构,第一时间就想到了枚举,枚举确实不错,尤其是加入了面对对象技术之后,简直就是一大命名神器,下面介绍一下枚举简单的应用
JDK1.5开始新增关键字enum,即定义枚举类型
[public] enum 枚举类型名{
枚举成员1,枚举成员2 ,枚举成员3........;
}
一个源文件只能定义一个public类型的枚举类型,枚举类型经过Java编译期编译后,也将会产生一个字节码文件(.class)。枚举类型本质上也是类,是一种特殊的类
注意: 所有的枚举类型都隐性地继承java.lang.Enum类
定义枚举类型
enum Diretions{
EAST,SOUTH,WEST,NORTH;
}
public class enumTest {
public static void main(String[]args){
Directions dir=Directions.EAST;
System.out.println("enum:"+dir);
}
}
此外switch也支持枚举类型(enum)
枚举类型与枚举类的区别
1、使用enum关键字定义一个枚举类型,实际上相当于定义了一个类,该类继承了java.lang.Enum类
2、枚举类Enum是java.lang包中的 一个类,该类的构造方法是protected的,实际上定义一个枚举类型之后,就会自动调用Enum类的构造方法,当然Enum类中其他的方法也是可以调用的。
常见的Enum类的方法有以下几种(红箭头表示处)(来源于java.api官方文档)
前面提示过,所有的枚举类型都隐性地继承java.lang.Enum类,就是说所有的枚举类型都可以看成一个类,当定义一个枚举类型时,每个枚举类型成员都是枚举类型的一个实例,这些实例默认属性是public static final,可以直接通过类名.变量的形式访问,即枚举类型名.枚举类型成员。
枚举类型的values()方法
枚举类型实例都含有一个values()方法,该方法是静态的,用于将枚举类型成员以数组的形式返回。
因为返回的是数组,所以使用length可以获得数组的长度,再通过ordinal方法返回枚举成员的序号。
enum Diretions{
EAST,SOUTH,WEST,NORTH;
}
public class enumTest {
public static void main(String[]args){
for(int i=0;i<Directions.values().length;i++)
System.out.println(Directions.values()[i].ordinal());
}
}
枚举类与接口
一般情况下,接口都包含抽象方法,当一个枚举类实现接口时,每一个枚举成员对象都必须实现接口中的抽象方法。与普通类一样,枚举类也可以实现多个接口,但必须实现所有的抽象方法。
枚举类实现接口与普通类是一致的,都是使用implements关键字来实现接口的,并且要实现接口中的所有抽象方法。可以说枚举中的枚举成员都是枚举类的匿名内部子类。
小结
本次实验的主题就是理解面对对象中的enum,掌握其中的基本用法