导言:
枚举是一种数据类型,比如接口使用interface来定义,类使用class来定义,而枚举使用enum来定义,枚举与接口和类是三者是同一个层次上的,就是同一种级别的,它们代表的都是数据类型。
定义:
枚举就是要让某个变量的取值只能为若干个固定值中的一个,否则编译器会报错。
注意:在JDK1.5之后,使用关键字enum定义一种新的数据类型,称为枚举类型。
那么,在没有枚举类型的情况下,我们是怎么做的呢?来看如下一段代码
public class enumDemo {
public static final int RED = 0X1;
public static final int GREEN = 0X2;
public static final int BLUE = 0X3;
public int color;
@Test
public void test1(){
color = RED;
}
}
分析:如果我们按照如上代码来定义的话,各位想一想,能不能达到这样一种效果,就是color的取值只能是RED,GREEN,BLUE三种中的一种,很明显,我们一看就知道不行。因为color是一个变量,我们可以随意进行赋值,在编译时期,我们是无法检查出color的取值是不是RED,GREEN,BLUE三种中的其中一种。因此,我们有了枚举这种数据类型,我们再来一如下一段代码:
public enum Color {
RED,GREEN,BLUE;
}
public class enumDemo {
public static final int RED = 0X1;
public static final int GREEN = 0X2;
public static final int BLUE = 0X3;
public int color;
@Test
public void test1(){
color = RED;
color = 4;
}
public Color colorEnum;
@Test
public void test2(){
colorEnum=Color.RED;
System.out.println(colorEnum);
}
}
分析:我们定义了一个枚举类,名字为Color,在代码中,我们定义了一个colorEnum变量,这个变量的类型是Color,这个时候,也就意味着colorEnum的取值,只能是Color中定义的GREEN,RED,BLUE三种当中的其中一种,不能是别的,否则编译器会报错,这边就体现了枚举的一个作用——限制变量的取值范围。
由于colorEnum变量也是一个对象,所以在colorEnum中有一些对应的方法,我们可以用代码测试一下:
System.out.println(colorEnum.name());
System.out.println(colorEnum.ordinal());
System.out.println(colorEnum.toString());
运行结果如下:
对于Color这个枚举类型,里面有一个静态的方法——values(),这个方法的作用是:返回一个Color数组,这个Color数组包含了枚举的所有的值,可以通过values()这个方法来求得枚举类型都定义了哪一些取值,代码如下
Color[] values = Color.values();
System.out.println(Arrays.toString(values));