java 枚举使用简书_java枚举类型使用和详解
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枚举类型使用和详解相关推荐
- java 枚举使用简书_Java枚举
1.简介 java中,使用关键字enum来定义枚举类,枚举类是一个特殊的类,大部分功能和普通类是一样的,区别为: 枚举类继承了java.lang.Enum类,而不是默认的Object类.而java.l ...
- java中main是什么_Java中的main()方法详解
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...
- java vm 远程监控配置文件_Java VisualVM监控远程JVM(详解)
我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualV ...
- java的sort的用法_Java排序方法sort用法详解
Java排序方法sort用法详解 发布于 2020-2-28| 复制链接 摘记: 本文实例为大家分享了java对数组.集合的排序方法,供大家参考,具体内容如下对数组的排序: ```java //对数组 ...
- java 注解入门 简书_Java注解入门
Java注解(Annotation) 0.0 Hello World 先上代码,再加以说明.这样不至于让初学者懵. 例1 public class Dog extends Animal(){ @Ove ...
- java 面试题 简书_java面试题
1.面向对象的三大基本特性: 封装:也就是把客观事物封装成抽象的类(向上抽象),并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏(访问权限). 继承:是指这样一种能力:它可 ...
- java 注解入门 简书_Java基础-注解
注解是什么? Java注解(Annotation)又称为Java标注.可以从字面的意思理解它,其实就是一个标注.他可以根据定义作用于不同的地方.注解对他们注解的代码没有直接影响.注解是JDK 5中引入 ...
- java课程设计总结迷宫_Java课程设计走迷宫详解.doc
Java语言与面向对象技术 课程设计报告 ( 2014 -- 2015年度第 1 学期) 走迷宫 目 录 目 录2 1 概 述1 1.1 课程设计目的1 1.2 课程设计内容1 2 系统需求分析2 2 ...
- java 事务回滚注解_Java Spring 事务回滚详解
这篇文章主要介绍了java Spring事务回滚的相关资料,需要的朋友可以参考下 spring 事务回滚 1.遇到的问题 当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误.伪代 ...
最新文章
- 启动R环境并执行R脚本
- 从零上手 GDB 调试,看这个教程就够了~
- 解决cookie写入问题
- kali查看共享 linux_在Linux下访问Windows共享文件夹
- app中 html5 search 事件,事件 - Cordova中文网
- 日期格式化为yyyymmdd_你还在用SimpleDateFormat格式化时间嘛
- 如何在验证集加噪声_如何使用Python构建机器学习模型
- 尤雨溪介绍 Vue 3:语法不变、TS 支持很好、2.0 系列还会发一个版本
- mysqlbinlog: unknown variable 'default-character-set=gbk'错误
- 《隐私计算》重 磅发布,全面、系统论述数据要素安全流通价值
- 【天池大数据赛题解析】资金流入流出预测(附Top4答辩ppt)
- 读书笔记三——你的灯亮着吗
- iOS常用三方库、插件、知名技术博客、常用开发工具使用介绍等等(Objective-C版本)
- 最好的PHP入门教程推荐:100篇PHP教程精华推荐
- connection linux refuse telnet_解决telnet无法连接 Connection refused
- 字写的不好没关系,还好我会python,轻轻一点就生成了艺术签名
- 用一个电位器调节音调的简单电路
- SDWebImage 第三方框架的使用——网络图片的处理操作
- 微信截图不能截微信界面
- 3D点集之间计算转移矩阵,旋转R,转移T,新增缩放s (总结全面)