枚举类型是JDK 5.0后定义的一种新的数据类型,它是由用户来定义的若干常量的集合。枚举类型的定义语法是:
public enum 类型名 {枚举成员列表}其中,enum是定义枚举类型的关键字,类型名是要定义的枚举类型名称,枚举成员列表是在枚举类型中定义的若干常量,枚举成员列表的每个常量之间用逗号分隔。
例如下面的语句定义了ErrorConstant枚举类型,该枚举类型内部包含LONIN_NAME_ERROR和LONIN_PSW_ERROR两个枚举成员,在枚举类型内部定义的枚举成员不需要添加public static final关键字,编译器会自动为其添加。
public enum ErrorConstant {
LONIN_NAME_ERROR,
LONIN_PSW_ERROR
}案例1:建立枚举类型ErrorConstant,在ErrorConstant内部定义LONIN_NAME_ERROR和LONIN_PSW_ERROR两个枚举成员。
在PCoreUnit5项目新建enumtype包,在enumtype包下新建枚举类型ErrorConstant。建立步骤如下:
(1)用鼠标选择src目录下的enumtype包,单击鼠标右键,在弹出的菜单项列表中选择【New】菜单项;
(2)在弹出的【New】子菜单项列表,选择【Enum】菜单项;
(3)在弹出的对话框中(如下图所示)Name输入域输入枚举类型名称“ErrorConstant”,单击【Finish】按钮即可。
ErrorConstant代码如下:
package enumtype;
/**
* @ClassName: ErrorConstant
* @Description: 集合框架(枚举类型)案例1
* @author 编程训练营
* @date
*
*/
public enum ErrorConstant {
LONIN_NAME_ERROR,
LONIN_PSW_ERROR
}枚举类型对象继承于java.lang.Enum类,因此该类中一些操作枚举类型的方法都可以应用到枚举类型中。下面是常用的操作方法。
●[] values()
该方法将当前枚举类型的枚举成员列表以数组形式返回。
●<T extends Enum<T>> valueOf(Class<T> enumType, String name)
该方法将字符串转换为枚举类型的实例,字符串由name指定,枚举类型由enumType指定。
●int compareTo(E eumType)
该方法用于比较两个枚举对象定义时的顺序,返回int类型的比较结果。返回结果大于0表示eumType在当前枚举对象位置之前;返回结果等于0表示eumType和当前枚举对象位置相同;返回结果小于0表示eumType在当前枚举对象位置之后。
案例2:建立ErrorConstanTest类,在类中使用枚举类型的values()、valueOf()和compareTo()方法。
在enumtype包下新建ErrorConstantTest测试类。代码如下:
package enumtype;
/**
* @ClassName: ErrorConstantTest
* @Description: 集合框架(枚举类型)案例2
* @author 编程训练营
* @date
*
*/
public class ErrorConstantTest {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
// 调用枚举类型的values()获取常量数组并输出
for( int i = 0; i < ErrorConstant.values().length; i++ )
{
System.out.println("枚举类型成员变量:" + ErrorConstant.values()[i]);
}
// 调用枚举类型的valueOf方法将字符串转换为ErrorConstant类型
ErrorConstant c1 = ErrorConstant.valueOf("LONIN_NAME_ERROR");
// 比较两个枚举对象
int compare = ErrorConstant.LONIN_NAME_ERROR.compareTo(c1);
if( 0 == compare )
{
System.out.println("ErrorConstant.LONIN_NAME_ERROR==c1");
}
else
{
System.out.println("ErrorConstant.LONIN_NAME_ERROR!=c1");
}
}
}案例代码调用枚举类型的values()方法,获取ErrorConstant的枚举成员数组并输出。调用枚举类型的valueOf()方法将字符串“LONIN_NAME_ERROR”转换为ErrorConstant类型,并赋值给ErrorConstant类型的变量c1,然后与ErrorConstant的LONIN_NAME_ERROR枚举对象进行比较。
程序执行结果如下图所示:

用枚举类型定义的枚举成员不能自定义值,其值由编译器自动给出,但在实际编程中有时需要枚举成员与某一特定值关联起来。例如在设计数学运算程序时,常常需要将圆周率(PI)和自然常数(E)定义为常量,遇到这样的问题时,使用枚举类型该如何解决呢?
枚举类型实质上也是类,因此在枚举类型中可以定义变量和添加构造方法。但是要求定义的变量和添加的构造方法的访问权限必须是private。
案例3:建立MathConstan类,在类中定义枚举成员PI和E,并定义变量value,添加构造方法对value进行初始化。
在enumtype包下新建MathConstan类。代码如下:
package enumtype;
/**
* @ClassName: MathConstant
* @Description: 集合框架(枚举类型)案例3
* @author 编程训练营
* @date
*
*/
public enum MathConstant {
// 定义枚举常量
PI(3.14),
E(2.17);
// 定义变量
private double value;
// 定义构造方法
private MathConstant(double value)
{
this.value = value;
}
/**
* @return the value
*/
public double getValue() {
return value;
}
/**
* @param value the value to set
*/
public void setValue(double value) {
this.value = value;
}
}MathConstant类除了定义PI和E枚举成员外,还定义了double类型的变量value,value作为枚举成员PI和E的值。在添加的构造方法中,对value进行赋值。因为添加了有参构造方法,在定义PI和E枚举成员时需要调用该构造方法(定义的枚举成员实际就是MathConstant的实例对象),对value进行赋值。
在enumtype包下新建MathConstanTest类,输出MathConstant的枚举成员PI和E的值。代码如下:
package enumtype;
/**
* @ClassName: MathConstantTest
* @Description: 集合框架(枚举类型)案例3
* @author 编程训练营
* @date
*
*/
public class MathConstantTest {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("MathConstant.PI的值为:" + MathConstant.PI.getValue());
System.out.println("MathConstant.E的值为:" + MathConstant.E.getValue());
}
}程序执行结果如下图所示:
