Java中枚举的使用方法详解

 更新时间:2023年07月15日 09:02:38   作者:信橙则灵  
这篇文章主要介绍了Java中枚举的使用方法详解,比如我们想声明一组季节的集合,那这里面最多有四种,即春夏秋冬,不允许有其他的季节,那为了实现这种限制,体现出季节是固定的四个对象,我们可以使用枚举,需要的朋友可以参考下

枚举介绍(enumeration)

枚举:把具体的对象一个个的列举出来的类,称为枚举类。

枚举对应的是一组常量的集合枚举属于一种特殊的类,里面只包含一组有限的特点的对象

解释:比如我们想声明一组季节的集合,那这里面最多有四种,即春夏秋冬,不允许有其他的季节,那为了实现这种限制,体现出季节是固定的四个对象,我们可以使用枚举。

在这里插入图片描述

枚举的实现方式

自定义类实现枚举

1、将构造器私有化(私有化即private),目的是为了防止,直接new对象
2、去掉set相关的方法,防止属性被修改
3、在类的内部创建固定的对象;
4、优化,添加final修饰符,实现底层优化。

在这里插入图片描述

  • 构造器私有化(private)
  • 本类内部创建一组对象[春、夏、秋、冬]
  • 对外暴露对象(通过为对象添加public final static修饰符)
  • 可以提供get方法,不能提供set方法(不允许进行属性的修改)
package com.zhangch.enum_;
public class Enumeration02 {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);
    }
}
class Season{
    private String name;
    private String desc;
    // 3、通过static final 方法,对外暴露对象
    public static final Season SPRING = new Season("春", "阳光明媚");
    public static final Season SUMMER = new Season("夏", "炎热");
    // 1、构造器私有化
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
    // 2、取消set方法,防止对属性进行修改
    public String getDesc() {
        return desc;
    }
    public String getName() {
        return name;
    }
    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

enum关键字实现枚举

1、将类的声明关键字从 class 替换为 enum
2、声明枚举常量对象的格式为: SPRING(“春天”, “温暖”) → 常量名(参数列表);
其实enum相当于讲对象的声明简化了:

SUMMER(“夏天”, “炎热”); 等同于:public static final Season SUMMER = new Season(“夏”, “炎热”);

在这里插入图片描述

3、如果声明多个枚举常量(对象),则使用 逗号 进行隔开;

4、如果使用enum实现枚举,要求将定义的常量对象,写在对象最前面

package com.zhangch.enum_;
/**
 * @author zhangch
 * @version 1.0
 */
public class Enumeration01 {
    public static void main(String[] args) {
        System.out.println(Season.SPRING);
    }
}
// 演示自定义枚举
enum Season{
    // 1、使用enum关键字替换class
    // 2、声明枚举常量对象的方式: SPRING("夏天", "炎热") -->  常量名(参数列表)
    // 3、如果有多个常量(对象),使用逗号隔开
    // 4、如果使用enum实现枚举,要求将定义的常量对象,写在对象前面。
    SPRING("春天", "温暖"), SUMMER("夏天", "炎热");
    private String name;
    private String desc;
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
    public String getName() {
        return name;
    }
    public String getDesc() {
        return desc;
    }
    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

注意细节

1、当我们使用enum关键字修饰类的时候,默认汇集成Enum类,而且是一个final类可通过javap进行反编译(class文件到java文件)来进行查看 (javac为编译java文件到class文件)

在这里插入图片描述

2、当我们使用 无参构造器 创建 枚举常量对象 时,则实参列表和小括号均可以省略;

在这里插入图片描述

3、当有多个枚举对象时,使用 逗号 进行分隔, 最后使用 分号 进行结尾

4、枚举对象必须放在枚举类的行首。

enum常用方法说明

1、使用关键字enum时,会隐式的继承Enum类,这样我们就可以使用Enum里面的方法

在这里插入图片描述

valueOf: 将枚举常量的名称 作为参数 传递给枚举对象 ,找到后会返回与参数匹配的枚举常量。

Season value = Season.valueOf("SPRING");System.out.println(value);

ordinal: 得到当前枚举常量的编号,默认从 0 开始;即方法values返回的下标。

name:得到当前枚举常量的名称,建议使用 toString() 方法

compareTo:比较两个枚举常量的大小,使用枚举常量的编号相减的方式获取对应的大小。如果为0,则证明相等。

values: 返回当前枚举类中的所有枚举常量;

使用注意

使用enum关键字后,该类就不能再继承其他类了(单继承机制),但是,仍然可以使用接口继承

到此这篇关于Java中枚举的使用方法详解的文章就介绍到这了,更多相关Java的枚举内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis整合ehcache做三级缓存的实现方法

    mybatis整合ehcache做三级缓存的实现方法

    ehcache是一个快速内存缓存框架,java项目里用起来很方便,下面这篇文章主要给大家介绍了关于mybatis整合ehcache做三级缓存的实现方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Spring Cloud  Hystrix实现服务容错的方法

    Spring Cloud  Hystrix实现服务容错的方法

    Hystrix是SpringCloud中重要的熔断保护组件,由Netflix开源,主要提供延迟和容错管理,以保障分布式系统的高可用性和鲁棒性,通过封装依赖项实现服务间隔离,引入回退逻辑应对依赖服务故障,有效防止系统崩溃和服务级联故障
    2024-10-10
  • 全面解析JTA 深度历险

    全面解析JTA 深度历险

    本文介绍了利用 JTA 深度历险的相关内容,充分举例说明JTA的原理和事务处理等相关内容,十分详细,需要的朋友可以参考下。
    2017-09-09
  • Java线程池 ThreadPoolExecutor 详解

    Java线程池 ThreadPoolExecutor 详解

    这篇文章主要介绍了Java线程池 ThreadPoolExecutor,线程池包括线程集合、阻塞队列、拒绝策略处理器,更多相关内容需要的朋友可以参考一下
    2022-07-07
  • Zookeeper实现分布式锁代码实例

    Zookeeper实现分布式锁代码实例

    这篇文章主要介绍了Zookeeper实现分布式锁代码实例,Zookeeper 分布式锁应用了其 临时顺序节点 的特性,在Zookeeper中创建一个持久节点ParentLock,当第一个客户端要获取锁时,在ParentLock节点下创建一个临时顺序节点,需要的朋友可以参考下
    2023-12-12
  • Java数据结构顺序表的详细讲解

    Java数据结构顺序表的详细讲解

    大家好,今天给大家带来的是顺序表,我觉得顺序表还是有比较难理解的地方的,于是我就把这一块的内容全部整理到了一起,希望能够给刚刚进行学习数据结构的人带来一些帮助,或者是已经学过这块的朋友们带来更深的理解,我们现在就开始吧
    2022-05-05
  • java动态代理示例分享

    java动态代理示例分享

    这篇文章主要介绍了java动态代理示例,需要的朋友可以参考下
    2014-02-02
  • MyBatis测试报错:Cannot determine value type from string 'xxx'的解决办法

    MyBatis测试报错:Cannot determine value type from string &a

    这篇文章主要给大家介绍了关于MyBatis测试报错:Cannot determine value type from string 'xxx'的解决办法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • springboot打包实现项目JAR包和依赖JAR包分离

    springboot打包实现项目JAR包和依赖JAR包分离

    这篇文章主要介绍了springboot打包实现项目JAR包和依赖JAR包分离,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • java字符串数组进行大小排序的简单实现

    java字符串数组进行大小排序的简单实现

    下面小编就为大家带来一篇java字符串数组进行大小排序的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09

最新评论