专栏首页Java知其所以然Java 枚举以及使用场景

Java 枚举以及使用场景

前言

在 java 编程过程中,我们通常需要定义一些固定数量的常量,在 jdk1.5 以前,通常的做法是定义一个静态常量类,但自 jdk1.5 后,java 引入了枚举(关键字 enum,全称为 enumeration,值类型),在枚举中,我们可以把相关的常量分组到一个枚举类型里,枚举也比常量类有更多灵活的用法,使用枚举,可以有效的提高代码的整洁性、可读性、可维护性等等。

枚举

定义

使用 enum 关键字。如果枚举不添加任何方法,枚举值默认为从 0 开始的有序数值。

枚举的特性

  • 不能被继承
  • java 不能使用 = 赋值
  • enum 可以通过方法显示赋值
  • enum 可以添加普通方法、静态方法、抽象方法、构造方法
  • 枚举可以实现接口

示例enum Color { RED,GREEN } 优点将常量组织起来,统一管理。 使用场景 1、作为普通的常量使用,如 星期、季节、颜色、城市 等等;通常配合 switch 语句使用。 2、往枚举中添加变量、构造函数、以达到灵活获取指定值的目的。 3、通常用于一些业务系统中定义一些固定值,如用于匹配数据库中的字段值等。在平时数据库表的设计中,我们一般以数字来代表一些常量,那么在 java 中就可以通过枚举来将数据库字段的数值和所代表的常量对应起来。 4、往枚举中添加自己特定方法,以实现自己所需的相关业务逻辑。比如:可以通过状态码获得对应的状态码信息。 枚举不能被继承的原因

所有的枚举类型隐性地继承自 java.lang.Enum。(枚举实质上还是类!每个被枚举的成员实质就是一个枚举类型的实例,也就可以理解为平时的对象,他们默认都是 public static final 的。可以直接通过枚举类型名直接使用它们。) 下面是我以前做过的一个电商类的项目使用枚举的代码示例。使用场景就是上面使用场景的 2、3、4。真的是枚举可以让你代码看起来很舒服,而且常量统一管理起来,当项目很大的时候很容易管理。

代码演示:

测试类

运行结果

总结

强烈建议当你需要定义一组常量时,使用枚举类型。

尽量不要使用枚举的高级特性,事实上高级特性都可以使用普通类来实现,没有必要引入复杂性! 在项目中一般都是通过枚举来定义常量数据字典。

现在的喜欢,其实不是真正的喜欢,只是因为不了解而已,真正的喜欢,是建立在非常了解的基础之上的。

了解 java 基础,喜欢上编程,不再迷茫。

本文分享自微信公众号 - Java知其所以然(gh_37a1335e2608)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 控制台程序 JDBC连接数据库

    首先下载mysql-connector jar包 https://dev.mysql.com/downloads/file/?id=480090

    赵哥窟
  • 跨专业转CS拿下百度java后台开发的干货分享

    人们总以为时间是一个小偷,偷走了我们所爱的一切。但,时间是先给予再拿走,每天都是一份礼物,每小时,每一分,每一秒。——《爱丽丝梦游仙境2》

    牛客网
  • Java异常知识点思考与总结

    Java 中的异常可以是方法执行过程中引发的,也可以是通过 throw 语句手动抛出的。一旦程序运行过程中发生了异常,JRE 就会试图寻找异常处理程序来处理异常...

    happyJared
  • 前端入门20-JavaScript进阶之异步回调的执行时机声明正文-异步回调的执行时机

    作为一个前端小白,入门跟着这几个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下。

    请叫我大苏
  • Kotlin---标准扩展函数

    除了自定义扩展之外,Kotlin中也定义了很多的扩展函数,而这些扩展函数的接收类型是范型,也就是所有对象都可以使用。这些标准的扩展函数都放在了Standard....

    None_Ling
  • Java|用 GitLab CI 进行持续集成:简介一些概念GitLab Runner.gitlab-ci.yml

    从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 ...

    黄小怪
  • 前端入门21-JavaScript的ES6新特性声明正文-ES6新特性

    阮一峰的这本书,我个人觉得写得挺好的,不管是描述方面,还是例子,都讲得挺通俗易懂,每个新特性基本都还会跟 ES5 旧标准做比较,说明为什么会有这个新特性,这更于...

    请叫我大苏
  • java小知识,大智慧

    java知识面很多,如果想系统的学习java知识,最好是看完一本相关书籍,其实这本书籍不用是什么名人写的,只要他有几年的开发经验基本上可以写出一个入门级的jav...

    哲洛不闹
  • Netty 编码与数据的写入

    业务里的数据最终需要通过socket写回到客户端,我们写的业务方法都是面向对象来进行编码的,而channel底层传输的是字节,Netty通过定义encode...

    良辰美景TT
  • 前端入门14-JavaScript进阶之继承声明正文-继承

    作为一个前端小白,入门跟着这几个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下。

    请叫我大苏

扫码关注云+社区

领取腾讯云代金券