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)的更多相关文章

  1. MySQL字段之集合(set)枚举(enum)

    MySQL字段之集合(set)枚举(enum) (2008-12-23 13:51:23) 标签:it  分类:MySQL 集合 SET mysql> create table jihe(f1 ...

  2. 枚举 enum

    typedef enum : NSUInteger { <#MyEnumValueA#>, <#MyEnumValueB#>, <#MyEnumValueC#>, ...

  3. 枚举enum学习小记

    参考文献: [1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社 [2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民邮电出版社 ...

  4. Java 枚举(enum) 详解7种常见的用法

    Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...

  5. Python 枚举 enum

    Python 枚举 enum enum 标准模块在 3.4 版本才可以使用,3.3 以下版本需要独立安装:https://pypi.python.org/pypi/enum34#downloads,官 ...

  6. 【转】结构struct 联合Union和枚举Enum的细节讨论

    结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...

  7. 枚举Enum和常量0之间的恩怨

    1,任何为0的常量表达式都能隐式的转换成枚举Enum. 对于这一点,在程序中没少吃苦头.特别是对于函数重载的情况,往往让人一头雾水. 看看下面的代码(摘自MSDN),你能猜到输出吗? public e ...

  8. C++和Java中枚举enum的用法

    在C++和java中都有枚举enum这个关键字,但是它们之间又不太一样.对于C++来说,枚举是一系列命名了的整型常量,而且从枚举值转化为对应的整型值是在内部进行的.而对于Java来说,枚举更像一个类的 ...

  9. 【转】枚举enum学习小记

    原帖: http://hi.baidu.com/yuleishou/item/caacae872190031ec216272f 表示在vs2008下实验了一下,有些东西和原帖的还是不一样的,都贴在这里 ...

  10. 枚举类型与位域枚举Enum

    一.概述 定义一个值类型,其中包含固定值集合.枚举类型变量可以是此集合中的任意一个或多个值.枚举使用enum关键字来声明,与类同级.枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符.枚 ...

随机推荐

  1. Winserver-FailoverCluster验证异常

    Q:新建的2台物理机,组成一个集群,第一遍没有问题,建成后,我想重建所以就destroy掉了,但是在重建时报 错误,尝试了各种清除集群指令和重新安装failover等方法都无效. 以后不在使用Dest ...

  2. 13.5. zipfile — Work with ZIP archives

    13.5. zipfile — Work with ZIP archives Source code: Lib/zipfile.py The ZIP file format is a common a ...

  3. cpio命令

    RPM包中文件提取 cpio命令主要有三种基本模式:"-o"模式指的是copy-out模式,就是把数据备份到文件库中:"-i"模式指的是copy-in模式,就是 ...

  4. 基于yum的方式安装Cloudera Manager Agent(使用Mysql 8.0版本)

    基于yum的方式安装Cloudera Manager Agent(使用Mysql 8.0版本) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.选择CDH版本 1>.确认 ...

  5. HTML&CSS基础-CSS的语法

    HTML&CSS基础-CSS的语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.dome.html源代码 <!DOCTYPE html> <html ...

  6. docker 运行ELK

    docker network create somenetwork docker run -d --name elasticsearch --net somenetwork -p 9200:9200 ...

  7. C++ --- 编码习惯小区别

    定义一个变量,最好养成C代码的习惯 C代码: 用到的变量X,要在最开始定义:先定义,用的时候在初始化: [例如] int x; //先定义 ..... ..... ; //再初始化 C++代码: 用到 ...

  8. Multiple network matches found for name 'selfservice', use an ID to be more specific.报错

    今天正在做openstack实例时输入neutron subnet-create --name selfservice   --dns-nameserver 114.114.114.114 --gat ...

  9. 浅谈OpenStack与虚拟机的区别与联系

    很多不太明白OpenStack与虚拟机之间的区别,下面以KVM为例,给大家讲一下他们的区别和联系 OpenStack:开源管理项目OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项 ...

  10. k8s安装之prometheus.yaml

    这个系列的东东满多的.要另开系列说明. 这里为了内容连续完成,先贴一个吧,其它configmap,exporter就不展示. 为了保持统一,将prometheus也放到二级目录了. - '--web. ...