关于JAVA中枚举类型,通过详细的例子以及注释来详细说明,具体请看下面代码,注意别着急仔细看注释以及每部的执行结果,结果即每一行的末尾注释,直接粘代码了。
package com.zerah.test03;
/**
* @program: JavaExercise
* @author: Mr.Zerah
* @create: 2018-10-16 23:30
* @description: 枚举测试
**/
enum SizeEnum {
SMALL, MEDIUM, LARGE
}
public class EnumTest {
public static void main(String[] args) {
SizeEnum size = SizeEnum.MEDIUM;
/*--------------toString/name-----------------*/
System.out.println(size.toString()); //返回其字面值
System.out.println(size.name()); //同toString作用一样
/*--------------equals/==-----------------*/
SizeEnum common = SizeEnum.SMALL;
System.out.println(common == SizeEnum.SMALL); //true
System.out.println(common.equals(SizeEnum.SMALL) && SizeEnum.SMALL.equals(common)); //true
System.out.println(common == SizeEnum.MEDIUM); //false
System.out.println(common.equals(size)); //false
/*-----------------枚举值的顺序------------------------*/
//MEDIUM声明的位置为:1SMALL声明的位置为:0 ,即默认从0开始
System.out.println("MEDIUM声明的位置为:" + size.ordinal() + "SMALL声明的位置为:" + common.ordinal()); //MEDIUM声明的位置为:1SMALL声明的位置为:0
/*-----------------枚举类型都实现了Comparable接口------------------------*/
//比较其实是比较的ordinal的大小,即声明的位置先后,例如SMALL小于MEDIUM即返回-1
System.out.println(common.compareTo(size)); //-1
/*-----------------枚举用于switch------------------------*/
onChosen(size); //chose Medium !!!
/*-----------------枚举valUeOf(String);方法,返回字符串对应的枚举类型-----------------------*/
System.out.println(SizeEnum.valueOf("SMALL")); //此处必须大小写对应 SMALL
//System.out.println(SizeEnum.valueOf("small")); // 否则会报没有此枚举常量的异常 java.lang.IllegalArgumentException: No enum constant
/*-----------------枚举values方法,返回一个包括所有枚举值的数组,顺序与声明时一致-----------------------*/
for (SizeEnum every:SizeEnum.values()) {
System.out.print(every+"、"); //SMALL、MEDIUM、LARGE、
}
}
static void onChosen(SizeEnum chose) {
switch (chose) {
case SMALL: //switch 语句内部,枚举值不能带枚举类型前缀,即不能使用Size.SMALL而直接使用SMALL
System.out.println("chose Small !!!");
break;
case MEDIUM:
System.out.println("chose Medium !!!");
break;
case LARGE:
System.out.println("chose Large !!!");
break;
}
}
}
那么为什么要定义枚举类呢?在java 5之前一般是在类中定义静态整型变量来实现类似功能,代码如下:
class SizeEnum{
public static final int SMALL =0;
public static final int MEDIUM=1;
public static final int LARGE =2;
}
采用了枚举之后有如下好处:
定义枚举的语法更为简洁
枚举更为安全,一个枚举类型的变量,他的值要么为null,要么为枚举值之一,不可能是其他值,但使用其他类型的变量,他的值就没有办法强制,值可能就是无效的
枚举类型自带很多便利的方法(values,valueOf,toString等等),易于使用
本文参考《java 编程的逻辑》,P120