之前并没有注意到枚举这个知识点,因为之前在项目中并没有使用过枚举,可能是项目并不是很复杂的原因吧,今天看张孝祥老师的讲解,觉得,这个枚举真的有很多值得学习的地方,探究一下枚举的设计原理,底层到底是怎么回事。

一、枚举的介绍

1、枚举用于表示编程语言中的一组命名常量

例如,一副牌中的四个套装可以是四个名为Club,Diamond,Heart和Spade的枚举器,属于名为Suit的枚举类型。其他示例包括天然枚举类型(例如行星,星期几,颜色,方向等)。 当我们在编译时知道所有可能的值时使用枚举,例如菜单上的选择,舍入模式,命令行标志等。枚举类型中的常量集不必始终固定。

2、在Java中(从1.5开始),枚举使用枚举数据类型表示

Java枚举比C / C ++枚举更强大。在Java中,我们还可以向其中添加变量,方法和构造函数。枚举的主要目标是定义我们自己的数据类型(enumer数据类型)。

二、枚举的使用

简单的使用,一般都是直接定义一些值,其实本质是一个个的对象,但是其实枚举也有复杂的使用方法,下面是一个复杂的使用方法的例子:

其实从内部类就可以看出来,定义的那些值真的是enum关键字修饰的对象,重写了父类的抽象方法,注意:定义的对象必须放在最上面

 public enum TrafficLamp {

     RED(30) {

         @Override
public TrafficLamp nextLamp() {
return GREEN;
}
},
GREEN(45) { @Override
public TrafficLamp nextLamp() {
return YELLOW;
}
},
YELLOW(5) { @Override
public TrafficLamp nextLamp() {
return RED;
}
}; public abstract TrafficLamp nextLamp(); private int time; private TrafficLamp(int time){
this.time = time;
}
}

三、枚举的原理

在第二个中其实已经介绍了一些枚举类的实际本质的东西,张孝祥老师用class类实现枚举,其中用到了内部类的概念,在编译之后,会形成四个class文件,内部类被编译成class文件。

 public abstract class TrafficLamp2 {

     /**
* 红灯 等待30秒
*/
public final static TrafficLamp2 RED = new TrafficLamp2(30) { @Override
public TrafficLamp2 nextLamp() {
return GREEN;
} @Override
public String toString() {
return "RED";
}
}; /**
* 绿灯 等待45秒
*/
public final static TrafficLamp2 GREEN = new TrafficLamp2(45) { @Override
public TrafficLamp2 nextLamp() {
return YELLOW;
} @Override
public String toString() {
return "GREEN";
}
}; /**
* 黄灯 等待5秒
*/
public final static TrafficLamp2 YELLOW = new TrafficLamp2(5) { @Override
public TrafficLamp2 nextLamp() {
return RED;
} @Override
public String toString() {
return "YELLOW";
}
}; public abstract TrafficLamp2 nextLamp(); public abstract String toString(); private int time; /**
* 私有化构造方法
*
* @param time
*/
private TrafficLamp2(int time) {
this.time = time;
}
}

Java中的枚举--Enumeration的更多相关文章

  1. Java中的枚举类型详解

    枚举类型介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义 ...

  2. 【译】Java中的枚举

    前言 译文链接:http://www.programcreek.com/2014/01/java-enum-examples/ Java中的枚举跟其它普通类很像,在其内部包含了一堆预先定义好的对象集合 ...

  3. 扒一扒: Java 中的枚举

    目录 1. 枚举的定义 1.1 传统的非枚举方法 1.2 枚举方法 1.3 定义总结 2 枚举的本质 2.1 继承 java.lang.Enum 2.2 final 类型 2.3 枚举常量本身就是该类 ...

  4. 全面解读Java中的枚举类型enum的使用

    这篇文章主要介绍了Java中的枚举类型enum的使用,开始之前先讲解了枚举的用处,然后还举了枚举在操作数据库时的实例,需要的朋友可以参考下 关于枚举 大多数地方写的枚举都是给一个枚举然后例子就开始sw ...

  5. 用好Java中的枚举真的没有那么简单

    1.概览 在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式. enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承j ...

  6. 说说Java中的枚举(一)

    在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的.例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”. ...

  7. 一文搞懂 Java 中的枚举,写得非常好!

    知识点 概念 enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, ...

  8. JAVA中的枚举小结

    枚举 将一组有限集合创建为一种新的类型,集合里面的值可以作为程序组件使用: 枚举基本特性 以下代码是枚举的简单使用: 使用values方法返回enum实例的数组 使用ordinal方法返回每个enum ...

  9. Android笔记:java 中的枚举

    部分数据使用枚举比较方便,java中的enmu不如c#中使用方便 记录备忘 以c#中的代码为例 public enum PlayState { /// <summary> /// 关闭 / ...

随机推荐

  1. 007--linux常用命令nginx和nfs服务

    作业: 集群搭建 1.部署nginx反向代理三个web服务,调度算法使用加权轮询: 2.所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性: 一.nginx服务 1. 先 ...

  2. RxJava入门之路(一)

    RxJava接触过蛮长时间了,但是让我说个所以然来还是说不出来,归根结底还是还是理解不够深刻,趁着年底这个时候争取写个系列出来给自己的学习做个记录 注意区分RxJava1.0和2.0的区别,以下默认是 ...

  3. 洛谷 - P1987 - 摇钱树 - dp - 贪心

    https://www.luogu.org/problemnew/show/P1987 这道题,假如是n==k,也就是把所有的树都砍完,我就知道要贪心去做,因为树给的初始金币是固定的,每天掉金币,当然 ...

  4. PTA 水...

    习题4-2 求幂级数展开的部分和 (20分) 已知函数e^x可以展开为幂级数1+x+x2/2!+x3/3!+⋯+xk/k!+⋯1+x+x^2 /2! + x^3 /3! + \cdots + x^k ...

  5. 【UVA - 10474 】Where is the Marble?(排序)

    Where is the Marble? Descriptions: Raju and Meena love to play with Marbles. They have got a lot of ...

  6. Log2Net组件代码详解(附开源代码)

    上一篇,我们介绍了Log2Net的需求和整体框架,我们接下来介绍我们是如何用代码实现Log2Net组件的功能的. 一.整体介绍 Log2Net组件本身是一个Dll,供其他系统调用. 本部分由以下几部分 ...

  7. Vue 基础指令学习

    学习Vue的一些总结,第一次写博客,文笔实在是很差 不过我会不断写的. <template> <!--只能有一个根节点 --> <div> <pre> ...

  8. (7)awk命令(每周一个linux命令系列)

    简介 awk是一个强大的文本分析工具,尤其是在应对格式化比较好的日志文件时,简单来说awk就是把文件逐行的读入,以空格为默认分隔符(也可以指定分隔符)将每行切片处理. 语法 awk [选项参数] 's ...

  9. 如何为github已有仓库添加协议。

    在github创建开源项目的时候,github会引导开发者添加一个开源协议,直接照着操作即可.但是如果一开始没有添加开源协议,后面要怎么添加呢? 百度无果.多方打听.总结如下步骤. 1.首先,进入你的 ...

  10. Android课程设计第三天帧动画区间动画

    注意:课程设计只为完成任务,不做细节描述~ 点火是帧动画,发射是区间动画,于是 <?xml version="1.0" encoding="utf-8"? ...