枚举(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关键字来声明,与类同级.枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符.枚 ...
随机推荐
- SQL SERVER-查询存储运行状态
SELECT p.name as SPName, qs.last_elapsed_time as [LastExecTime(ms)], (total_elapsed_time as [AvgExec ...
- bash 实用技巧
一..将文件的内容赋给一个变量: file=$(cat filelist) file=$(< file) NOTE:后者性能比前者好 二..bash 分组匹配: HOSTNAME='mysql- ...
- web workers 实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- react native jpush
原文链接:https://blog.csdn.net/qq_38719039/article/details/80684144 1 npm install jpush-react-native --s ...
- nodejs模块化标准
commonjs 导出一个 a.js function add(a, b){ return a+b; } module.exports = add; b.js const add = require( ...
- Windows 窗体的自适应分辨率、分屏显示、开机自启动
前言 这里所说的针对Winform.WPF 都适用.开机自启动对于控制台的也可以. 还是从项目实践中得来的,在这里记录下来. 对于自适应.分屏显示,在以前感觉应该比较高大上的问题,会比较难.在经过这次 ...
- BZOJ1396 识别子串 和 BZOJ2865 字符串识别
字符串识别 2865: 字符串识别 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 839 Solved: 261[Submit][Status][D ...
- Union-Find(并查集): Union-Find Application
Union-find 可以应用在很多方面 之前我们看到了union-find在dynamic connectivity上的应用,接下来介绍它在percolation上的应用. union-find在K ...
- c语言1博客作业08
一.本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 http://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/9982 我在 ...
- PPT扁平化设计总结
注:以下内容基本都来自知乎,由于已经不记得网址了,所以未能附上所有相关链接,抱歉. PPT扁平化设计原则一.亲密:意思相近的内容放在一起二.对齐:页面上的某两个元素之间总是围绕一条直线对齐三.对比:有 ...