博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Enum枚举类
阅读量:6247 次
发布时间:2019-06-22

本文共 1564 字,大约阅读时间需要 5 分钟。

  hot3.png

一、概述

 enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中。

 创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

public enum EnumTest {    MON, TUE, WED, THU, FRI, SAT, SUN;}

这段代码实际上调用了7次 Enum(String name, int ordinal):

new Enum
("MON",0);new Enum
("TUE",1);new Enum
("WED",2);    ... ...

二、自定义枚举属性方法

给 enum 对象加一下 value 的属性和 getValue() 的方法,构造方法覆盖默认isRest方法:

public enum EnumTest {    MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) {        @Override        public boolean isRest() {            return true;        }    },    SUN(0) {        @Override        public boolean isRest() {            return true;        }    };     private int value;    private EnumTest(int value) {        //MON(1) value=1        this.value = value;    }    public int getValue() {        return value;    }    public boolean isRest() {        return false;    }}

这里的value值标示的是枚举值定义时括号里的值,这个值不同与枚举ordinal()方法返回值,ordinal获取的是值的下标序号

枚举需要注意(详细看java.lang.Enum源码):

  1. 枚举可以使用switch分支语法

  2. 枚举类可以覆盖默认toString方法,默认toString返回name(MON)

  3. 枚举常量是单例的,所以直接调用==操作符 子类不可以重写该方法

  4. 因为枚举常量是单例的,所以不允许克隆

三、枚举和常量区别

枚举和常量都是用来标示一些常量,但是他们之间存在一定的区别:

1.枚举是一种数据类型而常量不是,也就是在实体中定义属性变量时可以是枚举变量但是无法将引用变量定义为常量(类似枚举值是类,而常量是无法改变值)

2.在动态反射生成对象时,类对象包含,枚举可以像正常变量使用而常量无法满足,同样在数据存储(hibernate)

3.常量无类型约束

四、总结

枚举有其特有的性质,它可以理解是特殊类的集合又在展现上拥有常量的方便性,补充了常量在作为实体对象属性上的缺点。

转载于:https://my.oschina.net/hcliu/blog/505037

你可能感兴趣的文章
java反射--动态加载
查看>>
Java下String逗号数组和List<String>的互相转换
查看>>
Eonasdan bootstrap datetimepicker 使用记录
查看>>
win7 64位系统下读写access数据库以及安装了office32位软件再安装64位odbc的方法
查看>>
网络最大流算法—Dinic算法及优化
查看>>
linux中iptables的用法
查看>>
MongoDB的简单操作
查看>>
C# 合并Excel工作表
查看>>
《机器学习实战》2.2.2分析数据:使用matplotlib创建散点图
查看>>
Linux如何查看当前占用CPU或内存最多的几个进程
查看>>
bit,byte,char,位,字节,字符 的区别
查看>>
Docker 容器入门
查看>>
[LeetCode] Pyramid Transition Matrix 金字塔转变矩阵
查看>>
几种查看CentOS系统版本号和位数的方法
查看>>
数字签名到底是什么鬼?
查看>>
GoldenGate实时投递数据到大数据平台(7)– Apache Hbase
查看>>
python安装h5py
查看>>
异常处理器
查看>>
生命的活力-负熵-秩序-结构
查看>>
[LeetCode] Number of Distinct Islands II 不同岛屿的个数之二
查看>>