枚举(enum)

2023-05-16

一.什么是枚举

我们学习过单例模式,即一个类只有一个实例。而枚举其实就是多例,一个类有多个实例,但实例的个数不是无穷的,是有限个数的。例如word文档的对齐方式有几种:左对齐、居中对齐、右对齐。开车的方向有几种:前、后、左、右!我们称呼枚举类中实例为枚举项!一般一个枚举类的枚举项的个数不应该太多,如果一个枚举类有30个枚举项就太多了!

二.定义枚举类型

注意,定义枚举类的关键字是enum,而不是Enum,所有关键字都是小写的
其中FRONT、BEHIND、LEFT、RIGHT都是枚举项,它们都是本类的实例,本类一共就只有四个实例对象。
在定义枚举项时,多个枚举项之间使用逗号分隔,最后一个枚举项后需要给出分号!但如果枚举类中只有枚举项(没有构造器、方法、实例变量),那么可以省略分号!建议不要省略分号!
不能使用new来创建枚举类的对象,因为枚举类中的实例就是类中的枚举项,所以在类外只能使用类名.枚举项。

三.枚举与switch

四.所有枚举类都是Enum的子类

五.枚举类的构造器

枚举类也可以有构造器,构造器默认都是private修饰,而且只能是private。因为枚举类的实例不能让外界来创建!

enum Direction {
    FRONT, BEHIND, LEFT, RIGHT;//[在枚举常量后面必须添加分号,因为在枚举常量后面还有其他成员时,分号是必须的。枚举常量必须在枚举类中所有成员的上方声明。]
    
    Direction()//[枚举类的构造器不可以添加访问修饰符,枚举类的构造器默认是private的。但你自己不能添加private来修饰构造器。] {
        System.out.println("hello");
    }
}

其实创建枚举项就等同于调用本类的无参构造器,所以FRONT、BEHIND、LEFT、RIGHT四个枚举项等同于调用了四次无参构造器,所以你会看到四个hello输出。

六.枚举类可以有成员

其实枚举类和正常的类一样,可以有实例变量,实例方法,静态方法等等,只不过它的实例个数是有限的,不能再创建实例而已。

七.枚举类中还可以有抽象方法

还可以在枚举类中给出抽象方法,然后在创建每个枚举项时使用“特殊”的语法来重复抽象方法。所谓“特殊”语法就是匿名内部类!也就是说每个枚举项都是一个匿名类的子类对象!通常fun()方法应该定义为抽象的方法,因为每个枚举常量都会去重写它。
你无法把Direction声明为抽象类,但需要声明fun()方法为抽象方法。

enum Direction {
    FRONT() {
        public void fun() {
            System.out.println("FROND:重写了fun()方法");
        }
    }, 
    BEHIND() {
        public void fun() {
            System.out.println("BEHIND:重写了fun()方法");
        }
    }, 
    LEFT() {
        public void fun() {
            System.out.println("LEFT:重写了fun()方法");
        }
    },
    RIGHT() {
        public void fun() {
            System.out.println("RIGHT:重写了fun()方法");
        }
    };
    
    public abstract void fun()[只需要把fun()方法修改为抽象方法,但不可以把Direction类声明为抽象类。];
}

八.每个枚举类都有两个特殊方法

九.实例

package com.vkeline.multicheck.constant;

/**
 * <p>
 * 枚举测试
 * </p>
 *
 * @author Longchengbin
 * @since 2020-7-17 14:32
 **/
public enum EnumTest {
    ONE("aa", "test1", 33),
    TWO("bb", "test2", 66),
    Three("cc", "test3", 99);
    private String a;
    private String b;
    private int c;

    EnumTest(String a, String b, int c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    @Override
    public String toString() {
        return "EnumTest{" +
                "a='" + a + '\'' +
                ", b='" + b + '\'' +
                ", c=" + c +
                '}';
    }

    /**
     * @author Longchengbin
     * @description 通过a获取枚举对象
     * @since 2020-7-17 14:54
     **/
    public static EnumTest fromA(String a) {
        for (EnumTest enumTest : EnumTest.values()) {
            if (a.equals(enumTest.getA())) {
                return enumTest;
            }
        }
        return null;
    }

    /**
     * @author Longchengbin
     * @description 通过名字获取枚举对象
     * @since 2020-7-17 15:13
     **/
    public static EnumTest fromName(String name) {
        return EnumTest.valueOf(name);
    }

    public String getA() {
        return a;
    }

}

十.参考网站

https://blog.csdn.net/newbie_907486852/article/details/81027512

 

 

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

枚举(enum) 的相关文章

  • c++ enum class转int

    示例 enum class 定义 span class token keyword enum span span class token keyword class span span class token class name Colo
  • C++ enum 和enum class

    文章目录 C 43 43 enum 和 enum class共同点区别 C 43 43 enum 和 enum class 在C 43 43 中 xff0c enum 是一种定义枚举类型的方法 一个枚举是一个整数值的命名集合 可以通过以下方
  • C语言 -- enum 枚举的使用

    一 枚举的定义 枚举是C语言的一种基本的数据类型 enum 枚举名 枚举元素1 枚举元素2 我们以星期举例 enum DAY MON 61 1 TUE WED THU FRI SAT SUN 如果没有赋值 xff0c 第一个枚举成员的默认值
  • C#中Enum枚举类型的简单使用

    枚举类型的介绍 xff1a 枚举类型是由一组特定常量构成的一组数据结构 xff0c 是值类型的一种特殊形式 xff0c 当需要一个由指定常量集合组成的数据类型时 xff0c 使用枚举类型 枚举声明可以显式地声明 byte sbyte sho
  • C#之enum,枚举类型的简介和使用

    枚举类似于数组 xff0c 但两者的定义方法和设计目的不同枚举中的值会放在栈中枚举类型不能直接放在方法中 xff0c 一般放在命名空间中或与类同级枚举使用enum关键字进行定义 xff0c 枚举类型的定义其实和类的成员定义相似 xff0c
  • enum 与string的转换

    从enum转换为string可以用ToString 方法 xff0c 如果从string转化为enum xff1a var domInt 61 Convert ToString row 34 DomInt 34 FlightDomInt d
  • c语言枚举做字符类型转换,C# 枚举类型转换字符串 Enum to string

    c 枚举类型转换字符串 enum to string 枚举类型都是值类型 system enum是一个抽象类 abstract class xff0c 所有枚举类型都直接继承自它 xff0c 当然也同时继承了它的所有成员 所有的值类型都是s
  • java枚举(enum)使用详解

    文章目录 前言一 枚举类型定义二 访问成员三 遍历四 在switch xff08 xff09 中使用枚举五 方法1 内置方法1 1 ordinal 用于返回成员的索引1 2 compareTo 用于比较枚举类型中两个成员的索引值1 3 va
  • C++枚举类型enum使用方法(附带可用代码+通俗易懂)

    1 说明 枚举用来表示某类事情的结果 xff1b 例1 xff1a 下棋比赛的三种结果 xff0c 赢 xff0c 和 xff0c 输 xff1b 这里是描述比赛的结果 例2 xff1a 一周7天中的俩种结果 xff0c 工作日和非工作日
  • C 语言使用宏自定义可打印的枚举(enum) 类型

    1 前言 xff1a 说点废话 xff0c 时间紧的请直接跳过 xff0c 看后面的实现 尽管本人很反感 C 语言中的宏定义 xff0c 特别是滥用宏定义经常会让问题变的扑朔迷离 xff0c 但是不得不承认 xff0c 在某些时候 xff0
  • C#语法小知识(三)枚举类型enum

    枚举类型声明一系列常数 xff0c 用于表示这个类型的变量可能会在这些常数里变化 我们在这篇文章里讲一下枚举类型的几个用法 一个简单的枚举类型的定义 xff1a enum TestEnum x y z 而使用也很简单 xff1a TestE
  • C/C++中枚举类型enum使用

    1 说明 xff1a 枚举enum的出现 xff0c 主要是为了解决一些特定属性的赋值 xff0c 变量取值仅在一定有限范围内的问题 例如一年只有十二个月取值 xff0c 一个星期只有七天情况 xff0c 人的性别只有男女两种等 这些属性如
  • C语言枚举类型(C语言enum用法)详解

    在实际编程中 xff0c 有些数据的取值往往是有限的 xff0c 只能是非常少量的整数 xff0c 并且最好为每个值都取一个名字 xff0c 以方便在后续代码中使用 xff0c 比如一个星期只有七天 xff0c 一年只有十二个月 xff0c
  • 推荐一个C++枚举转字符串的开源项目magic_enum

    文章目录 前言magic enum简单介绍具体使用原理简述局限性 简化与改进总结 前言 C 43 43 11引入了强类型的枚举类 enum class 用来代替旧风格枚举enum xff0c 新引入的 enum class 具有诸多优点 x
  • enum 实现 Parcelable 接口

    enum 实现 Parcelable 接口 当你创建一个枚举 xff0c 想要使用上述插件时 xff0c 就会发现无法序列号 这个是因为 Parcel writeXXX 没有写入枚举的方法 xff0c 所以无法直接实现 Parcelable
  • C语言--符号常量

    在C语言中 可以用一个标识符来表示一个常量 称之为符号常量 其特点是编译后写在代码区 不可寻址 不可更改 属于指令的一部分 一 符号常量定义用 define 符号常量在使用之前必须先定义 其一般形式为 形式为 define 标识符 常量 e
  • IOS_Swift_enum枚举方法

    本博文为子墨原创 转载请注明出处 http blog csdn net zimo2013 article details 50116811 enum Type Int case A 1 case B 3 普通方法 func toString
  • C++枚举类型用法总结(enum)(可以用枚举字符常量代替常量)

    C 枚举类型enum表示枚举 通常用于定义个新类型的字符常量 比如enum January February March 枚举类型的作用域一般是整个文件或者类内 当枚举类型定义在文件开头时 则作用域是从定义位置开始往后 不包括函数内定义 当
  • java枚举的集中管理

    java枚举的集中管理 一 产品中遇到的实际情况 枚举类泛滥 这个 这个 这个 这个 在 JDK 1 5 之前没有枚举类型 那时候一般用接口常量来替代 而使用 Java 枚举类型 enum 可以更贴近地表示这种常量 但是在项目中 就变成这样
  • Java,Enum里定义属性和方法

    最近的项目用到了大神写的统一返回码的代码 ErrorCode java 统一6位 异常码 author Administrator public enum ErrorCode global OK 000000 操作成功 ERROR 0000

随机推荐

  • 字符串中特殊字符处理

    public String htmlReplace String str str 61 str replace 34 amp ldquo 34 34 34 str 61 str replace 34 amp rdquo 34 34 34 s
  • Android开发环境配置

    环境为jdk11 43 android studio2021 jdk11的安装 xff1a 参考https blog csdn net qq 22136439 article details 103295019 注意 xff1a 1 jdk
  • java中文字符乱码编码转换大全

    System out println new String myFileName getBytes 34 gbk 34 System out println new String myFileName getBytes 34 utf 8 3
  • java实现打印套打功能

    package test import java awt print import java awt 实现套打 xff0c 把套打的格式当成一张图片 xff0c 将要填入的数据按其在图片在坐标来定位 public class PrintTe
  • oracle中not in的优化

    ORACLE中NOT IN 的替代 http myjcwy iteye com blog 553563 典型的查询方式为 xff1a SELECT TITLE FROM BOOKSHELF WHERE TITLE NOT IN SELECT
  • Visual Stdio 中的error C2001: 常量中有换行符

    error C2001 常量中有换行符 问题 xff1a 使用Visual Stdio xff0c cout中文的时候 xff0c 有的时候可以正常编译并运行 xff0c 但是有的时候会出现error C2001 常量中有换行符 出现err
  • oracle实现每天定时执行一个计划任务

    http www shangxueba com jingyan 1614101 html oracle实现每天定时执行一个计划任务 创建测试表 SQL gt create table a a date 表已创建 创建一个自定义过程 SQL
  • Spring Security配置访问权限在登录页循环并报错302

    事情是这样的 xff0c 在学习Spring Security框架时 xff0c 使用框架默认的登录页面 xff0c 没有任何问题输入正确的账户和密码后都能登录 xff0c 但是将登录页面换为自定义的页面后就无法登录了 如下 xff1a 密
  • .net core基于Oauth2+jwt两种方式实现身份认证(附单点登录)

    引用地址 xff1a net core基于Oauth2 43 jwt两种方式实现身份认证 附单点登录 cslx5zx5的博客 CSDN博客 net core oauth2 基于 net core 3 1微服务架构的SSO单点登录实战 本文所
  • wordpress中文网站代码下载

    wordpress下载中文网站代码 wordpress网站 https cn wordpress org 下载各个中文版本的 xff1a 提示 xff1a 不用用积分去下载了 方法 xff1a 登录网站 xff1a
  • 源码编译装redis

    源码编译装redis 1 下载包 span class token punctuation span root 64 ZZQVM1 span class token punctuation span span class token com
  • I2C协议

    文章目录 一 什么是I2C xff1f 二 物理层与协议层1 物理层 xff08 1 xff09 I2C总线 xff1a xff08 2 xff09 从地址 xff1a xff08 2 xff09 三种传输模式 2 协议层 xff08 1
  • C++智能指针

    文章目录 前言shared ptrunique ptrweak ptr使用智能指针安全吗 xff1f 前言 下面简单的概括了 3中智能指针的在使用时候需要注意的一些地方 xff0c 三种智能指针在离开其作用域之后都会被自动释放 xff0c
  • centos 7 安装 samba

    centos 7 安装 samba 最近想在linux系统下开发C 43 43 程序 xff0c 想用window的编辑器写代码 xff0c 所以在centos 系统下安装了samba xff0c 让window系统挂载centos 系统的
  • win10如何退出“暂停7天更新”? 恢复自动更新

    services msc 微软社区的解答 xff0c 我复bai制的 断开网络进du行如下操作 xff0c 如果遇到zhi程序占用的问题 xff0c 操作进入到dao安全模式 xff08 设置 更新和安全 恢复 立即重启 xff09 进行
  • 关于Qt中线程的挂起和唤醒问题

    为了平台的可移植性 xff0c 现在好多公司或开发者都在用Qt开发 xff0c 但是Qt开发文档有一个不非常理想的问题是 xff0c 有些问题描述的不是太详细 xff0c 特别是涉及到线程的挂起 xff0c 唤醒 和sleep 等问题 在Q
  • vscode不能跳转到定义的解决方法

    vscode不能跳转到定义的解决方法 0 分析1 安装global的依赖2 安装global3 安装插件并生成索引文件 0 分析 在Linux上使用vscode时发现跳转到定义非常缓慢 xff0c 甚至不能用 打开扩展C 43 43 Int
  • UI----UIslider 和UIcontrol的属性

    UISlide 属性 minimumValue 当值可以改变时 xff0c 滑块可以滑动到最小位置的值 xff0c 默认为 0 0 slider minimumValue 61 10 0 maximumValue 当值可以改变时 xff0c
  • JAVA转义字符详解

    一 JAVA中反斜杠 的作用 在不同的系统中 xff0c 路径的分隔符不同 xff0c 故需要做出判断 xff0c 并切换分隔符 VBS代码中确实不用转义 xff0c 但是在JAVA或JS中 xff0c 它采用的是C语言的语法 xff0c
  • 枚举(enum)

    一 什么是枚举 我们学习过单例模式 xff0c 即一个类只有一个实例 而枚举其实就是多例 xff0c 一个类有多个实例 xff0c 但实例的个数不是无穷的 xff0c 是有限个数的 例如word文档的对齐方式有几种 xff1a 左对齐 居中