Java基础(一)妙用枚举类
来源:互联网 发布:珠宝设计软件培训 编辑:程序博客网 时间:2024/05/21 06:22
JDK1.5以后,Java中多了一个Enum关键字,用来定义枚举类型。而在JDK1.5之前,人们都是手动来创建枚举。
首先,我们要知道什么是枚举?
顾名思义,枚举,就是将所需要的一个一个列出来。在创建枚举类时,我们必须手动指定它包含的所有对象。
那什么情况我们会使用枚举类型呢?
一般的数据,我们都会存储在关系型数据库中;图片多的话,有专门的图片服务器;日志、及时性高的数据,我们会存在NoSQL中;海量的数据,我们会想办法,将数据存在分布式数据库中。
而对于一些有特点的信息,我们无需将它们存储在数据库里面,我们会选择将它们用枚举类来进行表示。诸如数据字典、产品类别常量等等。
这些的特点就是:每个数据项目个数、取值都十分稳定。
枚举类的使用非常简单,下面我们来看枚举类常用的集中用法:
1、最简单的枚举类
public enum Gender {MALE,FEMALE;}
上面就是一个关于性别的简单的枚举类,而 `MALE` 和 `MEFMLE` 是Gender枚举类的两个对象实例。这也是枚举类的规定,必须将枚举类的对象实例,列在枚举类里面。我们程序员需要做的就是将实例列出来。
而实际上,JVM会默认每个对象使用public static final 关键字来修饰。也就是说上面的代码等价于:“public static final Gender MALE = new Gender();public static final Gender FEMALE = new Gender();”。
之所以设置为final的,是因为我们不希望枚举类的对象发生改变;使用static修饰,也无可非议,因为我们希望枚举类的对象是类的属性。
我们已经知道,所有属性都是用了final修饰符来修饰,那么我们必须在构造函数中、或者定义时、或者初始化块中指定初始值,但是通常情况下,我们都习惯在构造函数里面为对象赋值。
上面的例子,因为对所属的对象还没有赋值,所以需要完善后,才能使用。我们来看下面的例子:
2、比较常用的枚举类
public enum Gender {MALE("1","男"),FEMALE("0","女");private String code;private String desc;private Gender(String code,String desc){this.code = code;this.desc = desc;}public static Gender getEnumByCode(String code){for (Gender item : Gender.values()) {if (item.getCode()==code) {return item;}}return null;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}}
上面这种用法,大家应该都知道,既然 `MALE` 和 `MEFMLE` 都是对象,那么 `MALE` 和 `MEFMLE`后面的括号应该是构造函数。观察后不难发现,该类中确实存在一个 包含两个参数的Gender的构造函数。
不难发现,上面的例子存在一个问题:我们可以改变枚举类对象的值。原因很简单:尽管枚举类对象被final修饰,但是final关键字对于引用类型来说,只能保证引用地址不变,而对象的属性值是可以变话的。既会下面的情况,下面代码运行结果会是:男。
public static void main(String[] args) {Gender.MALE.setCode("2");System.out.println(Gender.getEnumByCode("2").getDesc());;}
可想而知,这样的枚举在使用是,是不合规矩的,我们最好将枚举类设置成不可变类。所以,我们还需要对这个例子进行改进:
3、最常用的枚举类
最起码,下面这种 是我最个人最喜欢用的一种:
将属性定义成final类型的,说明属性值是不可改变的,然后在构造函数中为对象赋值。这个枚举类变成了一个不可变类,它的属性不应该改变,这样会更加安全,代码更加简洁。
public enum Gender {MALE("1","男"),FEMALE("0","女");private final String code;private final String desc;private Gender(String code,String desc){this.code = code;this.desc = desc;}public static Gender getEnumByCode(String code){for (Gender item : Gender.values()) {if (item.getCode()==code) {return item;}}return null;}public String getCode() {return code;}public String getDesc() {return desc;}}
除此之外,枚举类还有一些用法,比如枚举类可以实现接口,枚举类可以包含抽象方法,这里就不过多讨论了。
通过这里的讲解,我们已经能够对枚举类轻车驾熟了。有需要用到的话,自己再去找资料也不晚。
- Java基础(一)妙用枚举类
- Java基础之枚举妙用
- java基础学习:枚举 一
- Java基础--枚举类
- java中接口的妙用(一)
- 【java基础回顾一】——枚举
- java基础---枚举(enum)
- Java中的枚举(一)
- java语言基础(102)——深入理解java枚举类(自己实现枚举 VS java原生提供枚举)
- 基础加强一(枚举)
- 枚举类(一)
- 【java基础】--Java枚举
- Java基础(七)——枚举类
- Java基础之(二十四)枚举类
- Java 基础(14)—— 枚举类
- java笔记(一)——枚举类
- java 基础加强 类的枚举
- JAVA基础加强:枚举(Enum)
- php小程序--记事本--登陆判断
- 关于苹果开发者账号
- 【暑期基础2】E HDU 汉字统计(汉字)
- linux查找目录下的所有文件中是否含有某个字符串
- uva11059 Maximum Product
- Java基础(一)妙用枚举类
- 对pair元素进行排序
- Android 使用android-support-multidex解决Dex超出方法数的限制问题
- 五种创建UIImage的类方法
- Codeforces 555C. Case of Chocolate (SET应用)
- Spring MVC学习-----------前言
- 单例模式两种实现方式
- git 简单命令操作
- 01背包问题