1.定义

An enum type is a special data type that enables for a variable to be a set of predefined constants. The variable must be equal to one of the values that have been predefined for it.

枚举类型是一种特殊数据类型,能够为一个变量定义一组预定义的常量。变量必须等于为其预定义的值之一。

枚举是特殊的类,可以拥有成员变量和方法。

2.使用

demo1

public enum Direction {

//实例列表末尾的分号是可选的

NORTH, SOUTH, EAST, WEST

}

Direction类型的实例可以按静态变量的方式引用:Direction.NORTH,Direction.EAST

demo2

在开发中枚举可以用来定义常量

public enum ServiceCode {

SYSTEM_NORMAL(200, "系统正常"),

//异常 返回码范围 400 -419 业务无关异常

INVALID_PARAM(401,"无效参数"),

//服务端异常

SERVICE_ERROR(500, "服务异常");

private int code;

private String desc;

ServiceCode(int code, String desc) {

this.code = code;

this.desc = desc;

}

public int getCode() {

return code;

}

public void setCode(int code) {

this.code = code;

}

public String getDesc() {

return desc;

}

public void setDesc(String desc) {

this.desc = desc;

}

}

3.详解和注意

​ 1>.枚举类型都隐式继承了java.lang.Enum类,因此不能继承其他类,但可以实现接口;

​ 2>.枚举类型只能有私有的构造方法(java运行时创建,外部不能进行实例化);

​ 3>不能泛型化;

​ 4>当有字段和方法时,枚举常量的列表必须以分号结尾;

​ 5>编译器在创建枚举时会自动添加一些特殊方法。例如,它们具有一个静态values方法。

​ 通过javap命令反编译class文件可以看出,并且它是被final修饰的,不能被继承。

​ $ javap Color.class

​ Compiled from "Color.java"

​ public final class com.zuoquan.lt.basic.enums.Color extends java.lang.Enum {

public static final com.zuoquan.lt.basic.enums.Color RED;

public static final com.zuoquan.lt.basic.enums.Color GREEN;

public static final com.zuoquan.lt.basic.enums.Color BULE;

public static com.zuoquan.lt.basic.enums.Color[] values();

public static com.zuoquan.lt.basic.enums.Color valueOf(java.lang.String);

public int getIndex();

public void setIndex(int);

public java.lang.String getName();

public void setName(java.lang.String);

static {};

​ }

​ values方法使用:

Color[] colors = Color.values();

for (Color color : colors) {

System.out.println(color.getName());

}

​ 6>父类Enum中的方法

S.N.

Method & 描述

1

protected Object clone()该方法将抛出CloneNotSupportedException异常.

6

int hashCode()此方法返回枚举常量的哈希码.

7

String name()此方法返回枚举常量的名称,正是因为在其枚举声明中声明.

8

int ordinal()此方法返回此枚举常量的序数(其枚举声明中的位置,其中初始常量被分配一个序号零).

9

String toString()此方法返回枚举常量的名称,在声明中所包含的.

​ 7>EnumSet和EnumMap

​ EnumSet这是一个用来操作Enum的集合,是一个抽象类,它有两个继承类:JumboEnumSet和RegularEnumSet。在使用的时候,需要制定枚举类型。 它的特点也是速度快。

​ EnumSet的元素不允许为null;EnumSet非线程安全。

//EnumSet

EnumSet colorSet = EnumSet.allOf(Color.class);

for (Color color : colorSet) {

System.out.println(color.getName());

}

​ EnumMap是Map的实现类。它的key为枚举元素,value自定义。EnumMap内部使用数组来实现。

​ EnumMap的key不允许为null,value可以为null,按照key在enum中的顺序进行保存,非线程安全。《Effective JAVA》中作者建议用EnumMap代替叙述 索引,最好不要用序数来索引数组,而要使用EnumMap。

//EnumMap

EnumMap enumMap = new EnumMap(Color.class);

enumMap.put(Color.RED, "red");

enumMap.put(Color.BULE, "bule");

for (Map.Entry entry: enumMap.entrySet()){

System.out.println(entry.getKey().name() + ":" + entry.getValue());

}

​ 8>枚举实现单例模式

​ 它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。如果用枚举去实现一个单例,这样的加载有点类似于饿汉模式,并没有起到lazy-loading的作用。

public enum Singleton {

/**

* 定义一个枚举的元素,它就代表了Singleton的一个实例。

*/

uniqueInstance;

/**

* 单例可以有自己的操作

*/

public void otherMethods(){

//功能处理

}

}

java 枚举使用简书_java枚举类型使用和详解相关推荐

  1. java 枚举使用简书_Java枚举

    1.简介 java中,使用关键字enum来定义枚举类,枚举类是一个特殊的类,大部分功能和普通类是一样的,区别为: 枚举类继承了java.lang.Enum类,而不是默认的Object类.而java.l ...

  2. java中main是什么_Java中的main()方法详解

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...

  3. java vm 远程监控配置文件_Java VisualVM监控远程JVM(详解)

    我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualV ...

  4. java的sort的用法_Java排序方法sort用法详解

    Java排序方法sort用法详解 发布于 2020-2-28| 复制链接 摘记: 本文实例为大家分享了java对数组.集合的排序方法,供大家参考,具体内容如下对数组的排序: ```java //对数组 ...

  5. java 注解入门 简书_Java注解入门

    Java注解(Annotation) 0.0 Hello World 先上代码,再加以说明.这样不至于让初学者懵. 例1 public class Dog extends Animal(){ @Ove ...

  6. java 面试题 简书_java面试题

    1.面向对象的三大基本特性: 封装:也就是把客观事物封装成抽象的类(向上抽象),并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏(访问权限). 继承:是指这样一种能力:它可 ...

  7. java 注解入门 简书_Java基础-注解

    注解是什么? Java注解(Annotation)又称为Java标注.可以从字面的意思理解它,其实就是一个标注.他可以根据定义作用于不同的地方.注解对他们注解的代码没有直接影响.注解是JDK 5中引入 ...

  8. java课程设计总结迷宫_Java课程设计走迷宫详解.doc

    Java语言与面向对象技术 课程设计报告 ( 2014 -- 2015年度第 1 学期) 走迷宫 目 录 目 录2 1 概 述1 1.1 课程设计目的1 1.2 课程设计内容1 2 系统需求分析2 2 ...

  9. java 事务回滚注解_Java Spring 事务回滚详解

    这篇文章主要介绍了java Spring事务回滚的相关资料,需要的朋友可以参考下 spring 事务回滚 1.遇到的问题 当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误.伪代 ...

最新文章

  1. 启动R环境并执行R脚本
  2. 从零上手 GDB 调试,看这个教程就够了~
  3. 解决cookie写入问题
  4. kali查看共享 linux_在Linux下访问Windows共享文件夹
  5. app中 html5 search 事件,事件 - Cordova中文网
  6. 日期格式化为yyyymmdd_你还在用SimpleDateFormat格式化时间嘛
  7. 如何在验证集加噪声_如何使用Python构建机器学习模型
  8. 尤雨溪介绍 Vue 3:语法不变、TS 支持很好、2.0 系列还会发一个版本
  9. mysqlbinlog: unknown variable 'default-character-set=gbk'错误
  10. 《隐私计算》重 磅发布,全面、系统论述数据要素安全流通价值
  11. 【天池大数据赛题解析】资金流入流出预测(附Top4答辩ppt)
  12. 读书笔记三——你的灯亮着吗
  13. iOS常用三方库、插件、知名技术博客、常用开发工具使用介绍等等(Objective-C版本)
  14. 最好的PHP入门教程推荐:100篇PHP教程精华推荐
  15. connection linux refuse telnet_解决telnet无法连接 Connection refused
  16. 字写的不好没关系,还好我会python,轻轻一点就生成了艺术签名
  17. 用一个电位器调节音调的简单电路
  18. SDWebImage 第三方框架的使用——网络图片的处理操作
  19. 微信截图不能截微信界面
  20. 3D点集之间计算转移矩阵,旋转R,转移T,新增缩放s (总结全面)

热门文章

  1. 自律到极致-人生才精致:第10期
  2. Pycharm 修改tab缩进快捷键
  3. 字节 位 比特的关系
  4. pytorch DataLoader
  5. 结构体转char[]
  6. js 获取图片url的Blob值并预览
  7. error: the following arguments are required: cfg_file
  8. windows 安装pycocotools
  9. expected unqualified-id before numeric constant问题原因
  10. 基于直方图均衡化的激光水下图像处理