Java枚举的使用

2023-10-27

枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中。此外,枚举类型还提供了安全检查功能。枚举类型本质上还是以类的形式存在。

1、使用枚举类型设置常量

以往设置常量,通常将常量放置在接口中,这样在程序中就可以直接使用了,并且该常量不能被修改,因为在接口中定义的常量时,该常量的修饰符为final与static。

public interface Constants
{
	public static final int RED = 1;
	public static final int BLUE = 2;
	public static final int GREEN = 3;
}

使用枚举定义常量的语法如下:

public enum ColorEnum
{
	RED,
	BLUE,
	GREEN
}

命名规范:

final常量:使用大写字母命名,并且中间使用下划线进行连接。

enum枚举:使用大写字母命名,并且中间使用下划线进行连接。

示例:枚举类型的使用。

public static void doit(ColorEnum c)
{
	switch (c)
	{
		case RED:
			System.out.println("This is RED");
			break;
		case BLUE:
			System.out.println("This is BLUE");
			break;
		case GREEN:
			System.out.println("This is GREEN");
			break;
		default:
			break;
	}
}

public static void main(String[] args)
{
	doit(ColorEnum.RED);
}

 

2、深入了解枚举类型

枚举类型较传统定义常量的方式,除了具有参数类型检测的优势之外,还具有其他方面的优势。

2.1 操作枚举类型成员的方法

用户可以将一个枚举类型看作是一个类,它继承于java.lang.Enum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员默认都被final、public、static所修饰,所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。

由于枚举类型对象继承与java.lang.Enum类,所以该类中一些操作枚举类型的方法都可以应用到枚举型中。

枚举类型的常用方法:

方法名称 具体含义 使用方法
values() 该方法可以将枚举类型成员以数组的形式返回 枚举类型名称.values()
valueOf() 该方法可以实现将普通字符串转换为枚举实例 枚举类型名称.valueOf("ABC")
compareTo() 该方法用于比较两个枚举对象在定义时的顺序 枚举对象.compareTo()
ordinal() 该方法用于得到枚举成员的位置索引 枚举对象.ordinal()

(1)values()方法

该方法可以将枚举类型成员以数组的形式返回,也可以通过该方法获取枚举类型的成员。

示例:使用枚举类型中的values()方法获取枚举类型中的成员变量。

/**
 * 使用枚举类型中的values()方法获取枚举类型中的成员变量
 * @author pan_junbiao
 */
public class ShowEnum
{
    enum ColorEnum
    {
        RED, BLUE, GREEN
    }

    // 循环由values()方法返回的数组
    public static void main(String[] args)
    {
        System.out.println("方式一:");
        for (int i = 0; i < ColorEnum.values().length; i++)
        {
            // 将枚举成员变量打印
            System.out.println("枚举类型成员变量:" + ColorEnum.values()[i]);
        }

        System.out.println("方式二:");
        for (ColorEnum c : ColorEnum.values())
        {
            // 将枚举成员变量打印
            System.out.println("枚举类型成员变量:" + c);
        }
    }
}

执行结果:

(2)valueOf()与compareTo()方法

枚举类型中静态方法valueOf()可以实现将普通字符串转换为枚举实例,而compareTo()方法用于比较两个枚举对象在定义时的顺序。

示例:枚举中valueOf()与compareTo()方法的使用。

/**
 * 枚举中valueOf()与compareTo()方法的使用
 * @author pan_junbiao
 */
public class EnumMethodTest
{
    enum ColorEnum
    {
        RED, BLUE, GREEN
    }

    // 定义比较枚举类型方法,参数类型为枚举类型
    public static void compare(ColorEnum c)
    {
        // 根据values()方法返回的数组做循环操作
        for (int i = 0; i < ColorEnum.values().length; i++)
        {
            // 将比较结果返回
            System.out.println(c + "与" + ColorEnum.values()[i] + "的比较结果为:" + c.compareTo(ColorEnum.values()[i]));
        }
    }

    public static void main(String[] args)
    {
        // 使用valueOf()将字符串转换为枚举实例
        ColorEnum c = ColorEnum.valueOf("BLUE");
        compare(c);
    }
}

执行结果:

说明:调用compareTo()方法返回的结果,正值代表方法中的参数在调用该方法的枚举对象位置之前;0代表两个相互比较的枚举成员的位置相同;负值代表方法中参数在调用该方法的枚举对象位置之后。

(3)ordinal()方法

该方法用于得到枚举成员的位置索引。

示例:枚举中ordinal()方法的使用。

/**
 * 枚举中ordinal()方法的使用
 * @author pan_junbiao
 */
public class EnumOrdinalTest
{
    public enum ColorEnum
    {
        RED, BLUE, GREEN
    }

    public static void main(String[] args)
    {
        for (int i = 0; i < ColorEnum.values().length; i++)
        {
            // 在循环中获取枚举类型成员的索引位置
            System.out.println(ColorEnum.values()[i] + "在枚举类型中位置索引值" + ColorEnum.values()[i].ordinal());
        }
    }
}

执行结果:

2.2 枚举类型中的构造方法

在枚举类型中,可以添加构造方法,但是规定这个构造方法必须为private修饰符修饰。

示例:在枚举类型中,可以添加构造方法。

/**
 * 在枚举类型中添加构造方法
 * @author pan_junbiao
 */
public class EnumIndexTest
{
    enum ColorEnum
    {
        RED(1, "我是红色"), BLUE(2, "我是蓝色"), GREEN(3, "我是绿色");

        private final int value;
        private final String description;

        private ColorEnum(int value, String description)
        {
            this.value = value;
            this.description = description;
        }

        public int getValue()
        {
            return this.value;
        }

        public String getDescription()
        {
            return this.description;
        }

        public static ColorEnum valueOf(int value)
        {
            switch (value)
            {
                case 1:
                    return ColorEnum.RED;
                case 2:
                    return ColorEnum.BLUE;
                case 3:
                    return ColorEnum.GREEN;
                default:
                    return null;
            }
        }
    }

    public static void main(String[] args)
    {
        for (ColorEnum c : ColorEnum.values())
        {
            System.out.println("枚举成员:" + c + " 值:" + c.getValue() + "    描述:" + c.getDescription());
        }

        System.out.println("值转换成枚举:" + ColorEnum.valueOf(2));
        System.out.println("字符串转换成枚举:" + ColorEnum.valueOf("GREEN"));
    }
}

执行结果:

2.3 枚举中实现接口

除了可以使用上述示例的方法定义getDescription()方法获取枚举类型成员变量是的描述之外,还可以将这个getDescription()方法放置在接口中,使枚举类型实现接口,然后使每个枚举类型实现接口中的方法。

示例:在项目中创建d接口和枚举类型的AnyEnum类,在枚举类型AnyEnum类中实现带方法的接口,使每个枚举类型成员实现该接口中的方法。

interface d
{
	public int getValue();

	public String getDescription();
}

/**
 * 枚举中实现接口
 * @author pan_junbiao
 */
public enum AnyEnum implements d
{
	RED
	{
		public int getValue()
		{
			return 1;
		}

		public String getDescription()
		{
			return "我是红色";
		}
	},

	BLUE
	{
		public int getValue()
		{
			return 2;
		}

		public String getDescription()
		{
			return "我是蓝色";
		}
	},

	GREEN
	{
		public int getValue()
		{
			return 3;
		}

		public String getDescription()
		{
			return "我是绿色";
		}
	};

	public static void main(String[] args)
	{
		for (AnyEnum c : AnyEnum.values())
		{
			System.out.println("枚举成员:" + c + " 值:" + c.getValue() + "    描述:" + c.getDescription());
		}
	}
}

执行结果:

 

3、使用枚举类型的优势

枚举类型声明提供了一种用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值。总结枚举类型,它具有以下特点:

(1)类型安全。

(2)紧凑有效的数据定义。

(3)可以和程序其他部分完美交互。

(4)运行效率高。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java枚举的使用 的相关文章

随机推荐

  • GPT2-Chinese:中文的GPT2训练代码

    推荐一个中文的GPT2项目 Chinese version of GPT2 training code using BERT tokenizer 作者提供了一份中文的GPT2训练代码 使用BERT的Tokenizer 可以写诗 新闻 小说
  • 液位系统c语言程序,超声波自动测量物体液位系统的设计

    超声波自动测量物体液位系统的设计 任务书 毕业论文15000字 摘要 本系统以STC89C52单片机为核心 通过硬件电路连接和软件程序的编写实现通用型超声波自动测量物体液位系统的设计 其主要原理是由单片机控制超声波发射电路发射超声波 超声波
  • win10手动添加程序到右键菜单/右键以pycharm project方式打开文件夹

    这次主要原因是在安装pycharm时 没选择将pycharm加入右键菜单 以至于无法选定文件夹作为pycharm项目打开 每次都需要打开pycharm 加载一个自己不需要的项目 再从pycharm里打开自己想要的 就去查了一下在win10里
  • 支付宝&微信个人收款支付系统解决方案

    原文链接 对于个人收款支付系统 由于没有营业执照 微信 支付宝官方提供的接口无法使用 个人二维码收款又无法完成支付系统后续工作 这个问题一直以来都没有找到一个适合的解决方案 经过不断尝试 最终找到了一个非常好用的第三方工具来解决这个问题 G
  • 决策树和朴素贝叶斯

    决策树 热力第二 物理 熵 混沌 系统越大 越乱 越看不懂 混乱度越大 熵越大 gt 熵增 容器 容器有个隔板 一边是氧气 一边是氮气 gt 熵 信息论 计算机是二进制 信息熵 中华民族9万个汉字 有多少本书 都是用9万个汉字排列 7000
  • Vue+iview表单验证失效

    iview表单验证的步骤 第一步 给 Form 设置属性 rules rules 第二步 同时给需要验证的每个 FormItem 设置属性 prop 指向对应字段即可 prop 第三步 注意 Form标签里面是 model 第四步 注意 在
  • 项目管理-进度网络图

    项目管理 网络图 一 网络图 1 1 分类 1 1 1 单代号网络图 节点型 1 2 2 双代号网络图 箭线型 1 2 逻辑关系 1 3 提前量和滞后量 1 4 关键路径法 Critical Path Method 1 5 基本概念 二 七
  • c语言c++新手题目a+b a*b

    两个变量之间的基本运算是学习c语言必不可少的入门题目 a b的求和意思是定义两个任意变量并输出他们的和 a b同理 开始写代码之前需要先了解c语言中各种符号的意思 所有的 C 语言程序都需要包含 main 函数 代码从 main 函数开始执
  • web端测试常见BUG总结

    原文 https www jianshu com p 4c7daac31c0f 一 缺少非空判断 服务器报500错误 编辑包含多个字段的页面时 有一些字段在程序中控制是必填的 事先未知 但是提交时没有任何说明提示 当不填写这些字段 直接保存
  • Java程序中Doc(文档)注释详解

    许多人写代码时总不喜欢写注释 每个程序员如此 嘿嘿 我也一样 不过 话说回来 该写还是要写哦 没人会喜欢一个不写注释的程序员 当然 也没有一个喜欢写注释的程序员 今天 我们就来说说Java注释之一 Doc注释 我们知道 Java支持 3 种
  • angular的ng-model指令

    div 名字 div
  • json单引号和双引号转义 完美解决由特殊字符引起的json解析错误(转载)

    原文链接 最近遇到json串里的内容包含单引号导致不能正常解析 使用html转义字符代替单引号 双引号等 即可解决 str str replaceAll 39 IE暂不支持单引号的实体名称 而支持单引号的实体编号 故单引号转义成实体编号 其
  • 3.go-mod依赖管理

    系列文章目录 提示 文章写的差不多的时候补上 略 文章目录 系列文章目录 前言 一 go mod 文件介绍 二 go mod 常用命令 1 常用命令总结 2 go mod 中最常用命令 3 常用命令 总结 前言 go 语言项目中对于第三方库
  • hadoop环境配置

    hadoop解压后需要配置多个文件 1 hadoop env sh 2 core site xml 3 hdfs site xml 4 mapred site xml 5 yarn site xml 具体配置语句网上很多直接找了复制进去并修
  • 智猪博弈与个人心态

    博弈论经济学中 智猪博弈 是一个著名的纳什均衡的例子 假设大猪和小猪共同住一个猪圈 猪圈一侧有 一个踏板 另一侧有一个食槽 每踩一次踏板 自动投食机就会向食槽投放一点饲料 这样一只猪去踩踏板 另一只猪就会去投食机口抢食物 结果就会出现这样一
  • STM32中对GPIO的配置与使用

    笔记写入一份到博客里 没事还可以查看一下 自己的也大致总结了一下自己对这个知识的理解 其实学习单片机最先熟悉的无非就是I O口的操作 STM32的GPIO也好理解 就8种模式 了解什么功能使用什么模式 怎么配置就可以了 废话不多说 了解一下
  • 用devecostudio如何升级鸿蒙,DevEco Studio使用指南上新篇-移动设备管理(MDM)

    DevEco Studio助力开发者一站式开发具备安全授权能力的APP Deveco Studio作为华为开发的应用开发工具 不断地聚合华为的特色开放能力 提供海量开箱即用的API 当华为发布新的开放能力时 如互联互通 平行视界 安全授权等
  • triton 客戶端用https协议访问服务

    背景 平时调用模型服务 都是用http IP的链接调用 但由于笔者环境的特殊性 访问模型必须经过一个https的公网URL 所以 如何用triton client访问https链接成为了一个问题 参考 TensorRT Triton学习笔记
  • VUE 配置环境变量

    vue 环境变量配置 参考文章 一颗小芹菜的日常 参考文章2 sunshineG env production 和 env development 文件 env production 文件是生产环境下的文件 env development
  • Java枚举的使用

    枚举类型可以取代以往常量的定义方式 即将常量封装在类或接口中 此外 枚举类型还提供了安全检查功能 枚举类型本质上还是以类的形式存在 1 使用枚举类型设置常量 以往设置常量 通常将常量放置在接口中 这样在程序中就可以直接使用了 并且该常量不能