首页 > 编程语言 >Java基础——枚举enum

Java基础——枚举enum

时间:2023-07-06 20:24:36浏览次数:45  
标签:Java 31 enum days 枚举 单例 public

一、什么是枚举

枚举,顾名思义就是一个个的列出来,和类以及接口是同一个级别的类型,本质就是类(final类)。它用于声明一组命名的常数的集合,当一个变量有几种可能的取值时,可以将它定义为枚举类型。Java中由关键字enum来定义一个枚举类型。  

定义一个简单的枚举:

这个枚举定义了两个常量,分别是ENABLE和DISABLE,表示当状态值code为0时所对应的状态名name是开启,当状态值code为1时所对应的状态名name是关闭。
public enum DemoEnums {

    ENABLE(0, "开启"),
    DISABLE(1, "关闭");

    /**
     * 状态值
     */
    private final Integer code;
    /**
     * 状态名
     */
    private final String name;
}
   

二、枚举的特性

  1. 枚举类继承了抽象类Enum的类,extends java.lang.Enum<>
  2. 通过一段静态代码块初始化枚举。
  3. 使用 enum 定义的非抽象的枚举类默认会使用 final 修饰,因此非抽象枚举类不能派生子类(即不能被继承)。
  4. 枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远都不可能产生实例。列出的这些实例,系统会自动给它们加上 public static final 修饰。枚举类的实例以逗号分隔,分号结束,这些列出的枚举值代表了该枚举类的所有可能的实例。
  5. 枚举类的构造器只能使用 private 访问控制符,强制指定其他的访问控制符(例如public、procted等)会报错。

三、使用场景

  1. 它通常用于表示一组有关联关系的常量,使代码更加易读、安全。比如一周的天数、月份、季节......
  2. 作为switch的入参( 大大的优化代码的可读性和维护性)
  3. 单例模式的实现
/**
 *一周七天的枚举
 */
public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
/**
 *每月多少天的枚举
 */
public enum Month {
    JANUARY(31),
    FEBRUARY(28),
    MARCH(31),
    APRIL(30),
    MAY(31),
    JUNE(30),
    JULY(31),
    AUGUST(31),
    SEPTEMBER(30),
    OCTOBER(31),
    NOVEMBER(30),
    DECEMBER(31);

    private final int days;

    Month(int days) {
        this.days = days;
    }

    public int getDays() {
        return days;
    }
}
使用
//使用1
Day day = Day.MONDAY;
switch (day) {
    case MONDAY:
        System.out.println("Today is Mondays");
        break;
    case FRIDAY:
        System.out.println("Today is Fridays");
        break;
    default:
        System.out.println("#######");
        break;
} //输出:Today is Mondays

//使用2
Month month = Month.FEBRUARY;
System.out.println("February has " + month.getDays() + " days.");
 //输出:February has 28 days.
 

单例模式举例

枚举单例(Enum Singleton)是实现单例模式的一种新方式,尽管单例模式在java中已经存在很长时间了,但是枚举单例相对来说是一种比较新的概念。
public enum EasySingleton{
    INSTANCE;
}
枚举类的每一个对象都是唯一的,所以一个枚举类中只有一个对象的时候就是单例模式。
//使用
Singleton singleton = Singleton.INSTANCE;
singleton.execute("Do something");
 

标签:Java,31,enum,days,枚举,单例,public
From: https://www.cnblogs.com/nliu/p/17533087.html

相关文章

  • 每日汇报 第二周第五天 JAVA字符串
    今日所学:掌握创建字符串的三种方法;掌握13种操作字符串的方法;掌握indexOf()、lastLndexOf()和equals()方法的注意事项和用法;找你给我创建StringBuilder类对象的三种方法;掌握六种操作StringBuilder类对象的方法明日计划:JAVA的常用类遇到困难:JAVA开始上难度了,需要更......
  • java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
    java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener类没有找到 解决:file--properties--选择Deployment Assembly --再点击右边的Add按钮--选择JavaBuildPathEntries--点击Next按钮--选择你的MavenDependencies......
  • 七月六号Java学习
    今天学习了键盘输入,下载idea,了解到怎么创建项目,模块,并写一个helloworld的代码  ......
  • Java 将PNG图片白色背景转为透明背景
    代码实现BufferedImagesourceImage=ImageIO.read(imageFile);intheight=sourceImage.getHeight();intwidth=sourceImage.getWidth();BufferedImagenewImage=newBufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);Graphics2Dg2d=newImage.createGra......
  • Java实现浏览器端大文件分片上传控件
    ​ 核心原理: 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。* 如何分片;* 如何合成一个文件;* 中断了从哪个分片开始。如何分,利用强大的js库,来减轻我们的工作,市场上已经能有关于大文件分块......
  • java -- 时间
       ......
  • java实现文本转语音(即语音朗读)
    java实现文本转语音(即语音朗读)1.方式一:使用jacob离线语音合成1.下载jacob-1.18.zip链接:https://pan.baidu.com/s/1-zYB9I4VF5cPuj3ok1WLyg提取码:7t1g2.将jacob-1.18-x64.dll拷贝到jdk的bin目录或windows/SysWOW64目录中3.添加需要的依赖<!--https://mvnrepository.com/a......
  • java http大文件断点续传上传问题
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......
  • 报错 Cannot construct instance of `java.time.LocalDate` LocalDateTime
    原因:报错的原因就是导入了JacksonObjectMapper对象映射器,导致不知道怎么将LocalDateTime转换成Json类型的数据了,在没有导入使用JacksonObjectMapper的时候是不会报错的。解决方式:指定LocalDateTime类型的数据如何进行序列化就好了,给实体类中LocalDateTime的属性加上注解就可以了:......
  • java中http请求-okhttp使用连接池优化
    愿历尽千帆,归来仍是少年原因:避免频繁频繁的开关连接。1.Maven添加依赖<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.10.0</version></dependency>2.OkHttpConfiguration配置类......