Logo

郎哥编程

枚举类型

2019-12-27 232

枚举类型是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】按钮即可。

  image.png   

                                    

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枚举对象进行比较。

程序执行结果如下图所示:

 image.png

用枚举类型定义的枚举成员不能自定义值,其值由编译器自动给出,但在实际编程中有时需要枚举成员与某一特定值关联起来。例如在设计数学运算程序时,常常需要将圆周率(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());
    }
 
}

程序执行结果如下图所示:

image.png

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论