枚举(Enum)
enum是一个全新的“类”。
枚举(Enum): 我们所定义的每个枚举类型都继承自java.lang.Enum类。枚举中的每个成员都是public static final的。
当您使用“enum”定义枚举类型时,实质上您定义出来的类型继承自java.lang.Enum类型,而每个枚举的成员其实就是您定义的枚举类型的一个实例(Instance),他们都被预设为final,所有您无法改变他们,他们也是static成员,所以您可以通过类型名称直接使用他们,当然最重要的,他们都是公开的(public)
换句话说,当定义了一个枚举类型后,在编译时刻就能确定该枚举有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间已经完全确定下来了。
1、定义一个枚举
public enum Color {
Red,White,Blue
}
使用枚举
public class ColorTest {
public static void main(String[] args) {
Color myColor = Color.White;
System.out.println(myColor);
}
}
2、定义一个有成员变量的枚举
public class EnumTest {
public static void doOp(OpConstant opConstant){
switch (opConstant) {
case TRUN_LEFT:
System.out.println("向左转");
break;
case TRUN_RIGHT:
System.out.println("向右转");
break;
case SHOOT:
System.out.println("射击");
break;
}
}
public static void main(String[] args) {
doOp(OpConstant.SHOOT);
}
}
enum OpConstant{
TRUN_LEFT, TRUN_RIGHT, SHOOT
}
定义枚举类型时本质上就是定义一个类别,只不过很多细节编译器帮您完成了。所有在某些程度上,enum关键字的作用就像是class或interface。
3、EnumSet的使用
enum AddressConst{
BEIJING,
SHANGHAI,
HANGZHOU
}
public class EnumSetDemo {
public static void showEnumSet(EnumSet<AddressConst> enumSet){
for(Iterator<AddressConst> iter = enumSet.iterator(); iter.hasNext();){
System.out.println(iter.next());
}
}
public static void main(String[] args) {
EnumSet<AddressConst> enumSet = EnumSet.of(AddressConst.BEIJING, AddressConst.SHANGHAI);
showEnumSet(enumSet);
System.out.println("-------");
//出去enumSet的enum实例
showEnumSet(EnumSet.complementOf(enumSet));
}
}
EnumSet.noneOf 方法的使用
public class EnumSetDemo2 {
public static void showEnumSet(EnumSet<AddressConst> enumSet){
for(Iterator<AddressConst> iter = enumSet.iterator(); iter.hasNext();){
System.out.println(iter.next());
}
}
public static void main(String[] args) {
EnumSet<AddressConst> enumSet = EnumSet.noneOf(AddressConst.class);
enumSet.add(AddressConst.BEIJING);
enumSet.add(AddressConst.HANGZHOU);
showEnumSet(enumSet);
}
}
4.EnumMap使用
public class EnumMapDemo {
public static void main(String[] args) {
Map<Action, String> map = new EnumMap<Action, String>(Action.class);
map.put(Action.PASUE, "暂停");
map.put(Action.STOP, "停止");
map.put(Action.START, "开始");
for(Action action : Action.values()){
System.out.println(map.get(action));
}
}
}
枚举(Enum)的更多相关文章
- MySQL字段之集合(set)枚举(enum)
MySQL字段之集合(set)枚举(enum) (2008-12-23 13:51:23) 标签:it 分类:MySQL 集合 SET mysql> create table jihe(f1 ...
- 枚举 enum
typedef enum : NSUInteger { <#MyEnumValueA#>, <#MyEnumValueB#>, <#MyEnumValueC#>, ...
- 枚举enum学习小记
参考文献: [1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社 [2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民邮电出版社 ...
- Java 枚举(enum) 详解7种常见的用法
Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...
- Python 枚举 enum
Python 枚举 enum enum 标准模块在 3.4 版本才可以使用,3.3 以下版本需要独立安装:https://pypi.python.org/pypi/enum34#downloads,官 ...
- 【转】结构struct 联合Union和枚举Enum的细节讨论
结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...
- 枚举Enum和常量0之间的恩怨
1,任何为0的常量表达式都能隐式的转换成枚举Enum. 对于这一点,在程序中没少吃苦头.特别是对于函数重载的情况,往往让人一头雾水. 看看下面的代码(摘自MSDN),你能猜到输出吗? public e ...
- C++和Java中枚举enum的用法
在C++和java中都有枚举enum这个关键字,但是它们之间又不太一样.对于C++来说,枚举是一系列命名了的整型常量,而且从枚举值转化为对应的整型值是在内部进行的.而对于Java来说,枚举更像一个类的 ...
- 【转】枚举enum学习小记
原帖: http://hi.baidu.com/yuleishou/item/caacae872190031ec216272f 表示在vs2008下实验了一下,有些东西和原帖的还是不一样的,都贴在这里 ...
- 枚举类型与位域枚举Enum
一.概述 定义一个值类型,其中包含固定值集合.枚举类型变量可以是此集合中的任意一个或多个值.枚举使用enum关键字来声明,与类同级.枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符.枚 ...
随机推荐
- 使用PLSQL工具连接远程Oracle
在不安装Oracle的情况下使用PLSQL连接远程的数据库步骤: 1)官网下载Instant client工具包 http://www.oracle.com/us/solutions/index-09 ...
- svn忘记密码怎么办?如何获取svn账号和密码?
SVN作为一种开放源代码的集中式版本控制系统,一直以来都深受所有公司的喜爱.伴随着它使用范围的广泛,一系列问题也随之接踵而至. 我们今天就来谈谈比较常见的但一般除了一个人干着急没办法解决的问题,那就是 ...
- obj + mtl 格式说明
OBJ(或 .OBJ)是一种开放的几何定义文件格式,最初由Wavefront Technologies公司开发,用以描述其Advanced Visualizer动画包.该格式已被其他3D图形应用供应商 ...
- C++ 谓词(predicate) 与 仿函数 ( functor (function object))
谓词与函数对象 谓词 predicate C++ 标准定义谓词如下: The Predicate parameter is used whenever an algorithm expects a f ...
- ubbuntu---多媒体播放器VLC
VLC多媒体播放器:Video LAN Client 信息载体:可见光通信技术(Visible Light Communication,VLC).@ https://baike.baidu.com/i ...
- C#随机数Random
一.常用操作 NextDouble():返回0-1.0之间的随机数 Next():返回非负随机数(0-216) Next(i):返回一个小于i的非负随机数 Next(i,j):生成i – j 的随机数 ...
- 完成一个springboot项目的完整总结一
一. 项目的基础环境的搭建 1.javaJDK的安装和配置环境变量 2.mysql 3.eclipse 二.项目高级环境的搭建 使用maven前,一定要先安装JDK 1) 解压maven到briup目 ...
- postgresql Kill掉正在执行的SQL语句
kill方式是杀掉进程,但是有时候需要取消相关SQL语句,采用以下方式 一.查看哪些SQL语句正在执行 语句如下:SELECT datname,procpid,query_start, current ...
- centos7.3 安装 mysql-5.7.13
系统环境: [root@localhost ~]# cat /etc/RedHat-release CentOS release 6.7 (Final)[root@localhost tools]# ...
- 结构化异常SEH处理机制详细介绍(二)
本文将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型.SEH实际包含两个主要功能:结束处理(termin ...