Java中的枚举--Enumeration
之前并没有注意到枚举这个知识点,因为之前在项目中并没有使用过枚举,可能是项目并不是很复杂的原因吧,今天看张孝祥老师的讲解,觉得,这个枚举真的有很多值得学习的地方,探究一下枚举的设计原理,底层到底是怎么回事。
一、枚举的介绍
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的更多相关文章
- Java中的枚举类型详解
枚举类型介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义 ...
- 【译】Java中的枚举
前言 译文链接:http://www.programcreek.com/2014/01/java-enum-examples/ Java中的枚举跟其它普通类很像,在其内部包含了一堆预先定义好的对象集合 ...
- 扒一扒: Java 中的枚举
目录 1. 枚举的定义 1.1 传统的非枚举方法 1.2 枚举方法 1.3 定义总结 2 枚举的本质 2.1 继承 java.lang.Enum 2.2 final 类型 2.3 枚举常量本身就是该类 ...
- 全面解读Java中的枚举类型enum的使用
这篇文章主要介绍了Java中的枚举类型enum的使用,开始之前先讲解了枚举的用处,然后还举了枚举在操作数据库时的实例,需要的朋友可以参考下 关于枚举 大多数地方写的枚举都是给一个枚举然后例子就开始sw ...
- 用好Java中的枚举真的没有那么简单
1.概览 在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式. enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承j ...
- 说说Java中的枚举(一)
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的.例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”. ...
- 一文搞懂 Java 中的枚举,写得非常好!
知识点 概念 enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, ...
- JAVA中的枚举小结
枚举 将一组有限集合创建为一种新的类型,集合里面的值可以作为程序组件使用: 枚举基本特性 以下代码是枚举的简单使用: 使用values方法返回enum实例的数组 使用ordinal方法返回每个enum ...
- Android笔记:java 中的枚举
部分数据使用枚举比较方便,java中的enmu不如c#中使用方便 记录备忘 以c#中的代码为例 public enum PlayState { /// <summary> /// 关闭 / ...
随机推荐
- k8s-资源指标API及自定义指标API-二十三
一. 原先版本是用heapster来收集资源指标才能看,但是现在heapster要废弃了. 从k8s v1.8开始后,引入了新的功能,即把资源指标引入api: 在使用heapster时,获取资源指标是 ...
- 任务39:Role以及Claims授权
基于Role角色的授权 asp.net core在逐渐淘汰这种基于RoleBase的基于角色的授权.鼓励大家使用基于Claim的授权 在认证的时候Cliam已经加入了Role 注释38节课的 自定义验 ...
- 2019年5月22日 AY 程序员调侃语录
我是AY,杨洋,做wpf开发的,最近得了一种病,程序员患得患失综合征.同事说,我年纪在变大,技术跟不上.业余之间,我原创了写了一些语录,给大家中午休息,累疲惫的时候,开心放松下. 1.活着的每一天都无 ...
- zoj2412 dfs连通图
zoj2412 #include<stdio.h> #include<iostream> #include<cstdio> #include<queue> ...
- Spring Security 使用Ajax登陆无法跳转页面解决方法
使用Security的朋友都知道,使用Security后,不再需要我们自己过多的(还需要写少量代码)写登陆的逻辑,只需要自己在html的登陆表单上面定义好输入框name为:username和passw ...
- 用AntDeploy如何更新Agent
AntDeploy AntDeploy是一款开源的一键发布部署工具,目的是代替重复性的发布动作,提高部署效率 1.一键部署iis 2.一键部署windows服务 3.一键部署到Docker 4.支持增 ...
- npm install 各种后缀 --xx说明
npm install xx -g 首先是在npm install xx 命令后面加 -g 它表示将当前包上下文(即,当前工作目录)安装为全局包. npm install (没有参数),在本地node ...
- (构造)51NOD 1080 两个数的平方和
给出一个整数N,将N表示为2个整数i与j的平方之和(i <= j),如果有多种表示,按照i的递增序输出. 例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2(注:3^ ...
- 多线程 线程间通信 wait,notify
1. 方法wait锁释放,notify()锁不释放
- 写一个类继承socket时遇到的问题(TCP)
主要为题出在服务器端的accept()函数,他返回两个参数,一个套接字和一个客户端的ip和端口组成的元组. 问题就出在这个套接字这里,我们继承了socket这个类,这个套接字创建的时候是通过socke ...