java枚举(enum)使用详解

2023-05-16

文章目录

  • 前言
  • 一、枚举类型定义
  • 二、访问成员
  • 三、遍历
  • 四、在switch()中使用枚举
  • 五、方法
    • 1.内置方法
      • 1.1 ordinal()用于返回成员的索引
      • 1.2 compareTo()用于比较枚举类型中两个成员的索引值
      • 1.3 valueOf()用于返回枚举类型中指定字符串对应的枚举成员,如果不存在则抛出异常
      • 1.4 values()方法以数组方式返回枚举类型中的成员
    • 2.构造方法
    • 3.自定义方法
    • 4.重写方法
  • 总结


前言

Java中的枚举是一种特殊的类,用于存放一组常量,比如一年分为四个季节、车分为机动车和非机动车等。


一、枚举类型定义

枚举类型使用关键字enum进行修饰,定义一组常量,定义方式如下:

enum famulei{
        /**
         * famulei:伐木累
         */
        ZHANGSAN,LISI,WANGWU
    }

定义一个名为famulei的枚举类型,其中有三个成员,ZHANGSAN,LISI,WANGWU,枚举成员一般使用大写。

二、访问成员

访问枚举类的成员可以直接通过枚举类名对成员进行访问:

System.out.println(famulei.ZHANGSAN);

输出结果:
在这里插入图片描述
也可以通过使用valus(),使用索引进行访问:

System.out.println(famulei.values()[1]);

输出结果:
在这里插入图片描述

三、遍历

枚举类型的遍历可以使用增强型for循环进行遍历,如下:

for (famulei f : famulei.values()) {
            System.out.println(f);
        }

输出结果:
在这里插入图片描述

四、在switch()中使用枚举

枚举类中的常量可以在switch()中使用,例如:

package learning;
import java.util.Arrays;
import java.util.EnumMap;

/**
 * @ClassName: MyEnum
 * @Description: Enum learning
 * @author: Lxy
 * @date: 2021/9/23 11:53
 */

public class MyEnum {
    enum famulei {
        /**
         * famulei:伐木累
         */
        ZHANGSAN, LISI, WANGWU;
    }
    public famulei NameChangedEvent(){
        famulei fml = famulei.LISI;
        switch (fml){
            case ZHANGSAN:
                fml= famulei.LISI;
                break;
            case LISI:
                fml=famulei.WANGWU;
                break;
            case WANGWU:
                fml=famulei.ZHANGSAN;
                break;
            default:
                System.out.println("Error!");
        }
        return fml;
    }

    public static void main(String[] args) {
        MyEnum myEnum =new MyEnum();
        System.out.println(myEnum.NameChangedEvent());
    }
}

输出结果:
在这里插入图片描述

五、方法

1.内置方法

Java中枚举类型还提供了很多其他的方法,比如ordinal()、compareTo()、valueOf()以及上述提到的values()等。

1.1 ordinal()用于返回成员的索引

//返回成员索引
System.out.println(famulei.LISI.ordinal());

输出结果:
在这里插入图片描述

1.2 compareTo()用于比较枚举类型中两个成员的索引值

//成员索引成员索引
System.out.println(famulei.ZHANGSAN.compareTo(famulei.WANGWU));

输出结果:
在这里插入图片描述

1.3 valueOf()用于返回枚举类型中指定字符串对应的枚举成员,如果不存在则抛出异常

System.out.println("字符串ZHANGSAN对应的枚举成员:"+famulei.valueOf("ZHANGSAN"));

输出结果:
在这里插入图片描述
但是,如果枚举类型中不存在指定的字符串对应的成员,会抛出IllegalArgumentException异常:

System.out.println("字符串XIAOLIU对应的枚举成员:"+famulei.valueOf("XIAOLIU"));

在这里插入图片描述

1.4 values()方法以数组方式返回枚举类型中的成员

System.out.println("无格式化输出:"+famulei.values());
 System.out.println("格式化输出:"+ Arrays.toString(famulei.values()));

输出结果:
在这里插入图片描述
该方法返回了数组的地址,可以使用Arrays.toString()方法进行格式化。

2.构造方法

枚举类型既然是一种特殊的类,那么就有自己的构造方法,使用构造方法可以对枚举类的成员进行属性(也许叫属性不太合适)说明。同时能够实现对成员属性的访问。

package learning;
import java.util.Arrays;
import java.util.EnumMap;

/**
 * @ClassName: MyEnum
 * @Description: Enum learning
 * @author: Lxy
 * @date: 2021/9/23 11:53
 */

public class MyEnum {
    enum famulei {
        /**
         * famulei:伐木累
         */
        ZHANGSAN("male",20), LISI("male",25), WANGWU("female",30);
        private String sex;
        private int age;
        //构造方法
        famulei(String sex, int age) {
            this.sex=sex;
            this.age=age;
        }
    }

    public static void main(String[] args) {
        System.out.println("LISI's age:"+famulei.LISI.age);
        System.out.println("ZHANGSAN's sex:"+famulei.ZHANGSAN.sex);
    }
}

输出结果:
在这里插入图片描述

3.自定义方法

可通过自定义方法修改成员属性,例如:

package learning;
import java.util.Arrays;
import java.util.EnumMap;

/**
 * @ClassName: MyEnum
 * @Description: Enum learning
 * @author: Lxy
 * @date: 2021/9/23 11:53
 */

public class MyEnum {
    enum famulei {
        /**
         * famulei:伐木累
         */
        ZHANGSAN("male",20), LISI("male",25), WANGWU("female",30);
        private String sex;
        private int age;
        //构造方法
        famulei(String sex, int age) {
            this.sex=sex;
            this.age=age;
        }

        //自定义方法
        public void setSex(String sex){
            this.sex=sex;
        }
        public void setAge(int age){
            this.age=age;
        }
    }

    public static void main(String[] args) {
        System.out.println("ZHANGSAN's sex:"+famulei.ZHANGSAN.sex);
        System.out.println("ZHANGSAN's age:"+famulei.ZHANGSAN.age);
        famulei.ZHANGSAN.setSex("female");
        famulei.ZHANGSAN.setAge(35);
        System.out.println("ZHANGSAN's sex:"+famulei.ZHANGSAN.sex);
        System.out.println("ZHANGSAN's age:"+famulei.ZHANGSAN.age);
    }
}

输出结果:
在这里插入图片描述


4.重写方法

上述Arrays.toString()方法输出枚举类型中的成员,可以对其进行重写,输出每一个成员的属性,例如:

package learning;
import java.util.Arrays;
import java.util.EnumMap;

/**
 * @ClassName: MyEnum
 * @Description: Enum learning
 * @author: Lxy
 * @date: 2021/9/23 11:53
 */

public class MyEnum {
    enum famulei {
        /**
         * famulei:伐木累
         */
        ZHANGSAN("male",20), LISI("male",25), WANGWU("female",30);
        private String sex;
        private int age;
        //构造方法
        famulei(String sex, int age) {
            this.sex=sex;
            this.age=age;
        }

        //自定义方法
        public void setSex(String sex){
            this.sex=sex;
        }
        public void setAge(int age){
            this.age=age;
        }
        //重写方法
        @Override
        public String toString(){
            return this.sex+"-"+this.age;
        }

    }

    public static void main(String[] args) {
        System.out.println(Arrays.toString(famulei.values()));
    }
}

输出结果:
在这里插入图片描述

总结

本文主要简单介绍Java中枚举类型的一些简单使用,此外,枚举类型也可用于实现接口等。

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

java枚举(enum)使用详解 的相关文章

随机推荐

  • CSS基线对齐的理解以及处理

    相信大家都会遇到同行不同盒子中文本的内容不能对齐的情况 xff0c 而不知道这是为何 xff1f 其实这是因为基线对齐的原因 什么是基线对齐 xff1f 先让我们来看一张图片 xff1a 到这里我们的疑惑是不是少了一些 xff1f 基线对齐
  • Eigen求解大型稀疏对称矩阵(Cholesky分解)

    参考自Eigen文档 代码如下 xff1a span class token macro property span class token directive hash span span class token directive ke
  • CMake的基本使用方法与install命令

    源代码 main cpp文件如下 span class token macro property span class token directive hash span span class token directive keyword
  • docker常用命令总结

    docker常用命令总结 span class token function uname span span class token parameter variable r span span class token comment 查看
  • 基于STC15的飞控设计(1)飞控电路设计

    前言 学校举办的无人机比赛 xff0c 要求使用stc15系列芯片设计飞控 xff0c 然后完成一台四轴的无人机进行穿越障碍的比赛 xff0c 第一次设计飞控 xff0c 如果有什么设计得不好的希望大家多多指教 这个博客算是制作流程的记录
  • STM32F407霸天虎FreeRTOS学习笔记——移植FreeRTOS到开发板上

    STM32F407霸天虎FreeRTOS学习笔记 移植FreeRTOS到开发板上 FreeRTOS源码获取移植第一步 xff1a 创建文件夹Keilmain c 实验效果 FreeRTOS源码获取 在移植之前 xff0c 首先要获取到 Fr
  • 倒立摆及其应用//2021-2-23

    前言 xff1a 以前搞电赛的时候搞过Pid平衡小车 xff0c 倒立摆基本实现方法与平衡小车差不多 xff0c 有一次刚院跑到实验室唠嗑 xff0c 问你知不知道倒立摆的应用 xff1f 我说不知道 xff0c 他说航天火箭 xff0c
  • TypeError: Cannot convert a symbolic Keras input/output to a numpy array.

    问题类型 TypeError Cannot convert a symbolic Keras input output to a numpy array This error may indicate that you re trying
  • 自己的学习记录

    从今天开始学习如何使用Java来写数据库课程设计的作业 xff01 xff01 xff01
  • Tsai分享:资源分享(1)——视觉SLAM十四讲及视频

    Tsai分享 xff1a 资源分享 xff08 1 xff09 视觉SLAM十四讲及视频 一 视觉SLAM十四讲 如若转载请附上链接 xff1a https blog csdn net weixin 43338642 article det
  • pycharm如何查看python文件的工作目录

    在找bug的过程中发现python文件的工作目录和存放目录地址有可能是不一样的 xff0c pathlib路径操作中的pathlib Path cwd 获取的是工作目录而不是存放目录地址发现工作目录和存放目录地址不同的时候一定要修改过来 x
  • C++中vector的用法详解

    文章目录 构造函数增加函数删除函数遍历函数判断函数大小函数交换函数赋值函数改变空间 构造函数 span class token comment vector 创建一个空vector span vector span class token
  • 华为技术面

    文章目录 手撕代码流程题目描述方法介绍面试官评价思维扩展 项目描述技术问题内存说明下C 43 43 的内存分配情况 xff0c 栈和队列的区别以及程序员如何分配回收内存 xff1f C 43 43 程序员和Java程序员有一个很大的区别 x
  • 华东师范大学计算机学硕2023考研经验贴

    文章目录 1 个人经历1 1 一战1 2 二战1 3 心态 2 初试2 1 政治2 2 英语2 3 数学2 4 408 3 复试3 1 机试A 数字猜想B 特殊质数C 最小字符串D 数字排序E 整数分解 3 2 英语面试3 3 综合面试 1
  • Go后端部署服务器

    go后端部署服务器方式一 xff1a xff08 最简单 xff09 和暑假做重点场所项目部署一样 xff0c 简单 xff0c 无脑 xff0c 手动 xff0c 麻烦 span class token number 1 span spa
  • 数据分析实用python程序

    文章目录 1 pdf转txt2 判断txt文件是否为空3 获取txt文件每一行4 获取文件夹所有文件名5 读写xlsx表格6 遍历txt每个字符7 字符串中字符替换 1 pdf转txt span class token comment de
  • 51单片机之数码管

    1 静态数码管原理图 LED数码管根据LED的不同接法分为两类 xff1a 共阴和共阳 为了显示数字或字符 xff0c 必须对数字或字符进行编码 七段数码管加上一个小数点 xff0c 共计8段 因此为LED显示器提供的编码正好是一个字节 共
  • 银行排队模拟(队列)

    银行排队模拟程序 队列类Queue ifndef span class token constant QUEUE H span define span class token constant QUEUE H span struct Rec
  • C/C++中struct和class的区别

    目录 struct class struct和class的区别 struct struct是描述一个数据结构的集合 xff0c 像一周有七天 xff0c 你可以把一周看成是一个结构体 xff0c 然后在结构体里面定义一个数组来存放这个七天
  • java枚举(enum)使用详解

    文章目录 前言一 枚举类型定义二 访问成员三 遍历四 在switch xff08 xff09 中使用枚举五 方法1 内置方法1 1 ordinal 用于返回成员的索引1 2 compareTo 用于比较枚举类型中两个成员的索引值1 3 va