一、枚举类基本语法

在 Java SE5 中添加了一个看似很小的特性,即 enum 关键字,它使得我们在需要群组并使用枚举类型集时,可以很方便的处理。

所有的 enum 都继承自 java.lang.Enum 类。由于 Java 不支持多重继承,所以 enum 不能再继承其他类。然而我们创建一个新的 enum 时,可以同时实现一个或多个接口。

创建一个简单的ColorEnum

public enum ColorEnum {
RED,YELLOW,BULE,GREED,BLACK;
}

调用的收直接在方法中使用 ColorEnum.RED 即可

ColorEnum red = ColorEnum.RED;

而且 Enum 有一个特别实用的特性,它可以在switch语句内使用:

ColorEnum red = ColorEnum.RED;
// 虽然一般情况下我们必须使用 enum 类型来修饰一个 enum 实例,但是在 case 语句中却不必如此。
switch (red) {
case RED:
System.out.println("this's red color");
break;
case BULE:
System.out.println("this's bule color");
break;
default:
System.out.println("this's other color");
}

由于 switch 是要在有限的可能值集合中进行选择,因此它和 enum 是绝佳的组合。一般来说,在 switch 中使用整数值,而枚举实例天生就是具备整数值的次序,并且可以通过 ordinal() 方法取得其次序(现在显然是编译器帮我们做了类似的工作),因此我们可以再 switch 语句中使用 enum。

自定义构造方法枚举类如何定义?

public enum  RedisEnum {

    ADD(1, "add"), DEL(2, "delete"), query(3, "query");

    private Integer type;
private String name; private RedisEnum(Integer type, String name) {
this.type = type;
this.name = name;
} public Integer getType() {
return type;
} public String getName() {
return name;
}
}

枚举类提供的 API

values(); 可以遍历 enum 实例。values()方法返回 enum 实例的数组,而且该数组中的元素严格保持其在 enum 中声明时的顺序,因此可以在循环中使用 values()返回的数组。

valueOf(String key);

ordinal();返回一个 int值,这个是每个 enum 实例在声明时的次序,从 0 开始。

getDeclaringClass();enum 实例上调用这个方法可以获取其所属的 num 类

name();返回 enum 实例声明时的名字,这与使用 toString 方法效果相同

toString();返回 enum 实例声明时的名字

equals(Object obj);enum 重写了 equals 和 hashcode

hashCode();enum 重写了 equals 和 hashcode

二、 使用枚举类型实现策略模式

简单举一个例子

public enum CalculationEnum {

    /**
* 加法运算
*/
ADD{
@Override
public double exec(double num1, double num2) {
return num1 + num2;
}
},
/**
* 减法运算
*/
SUB{
@Override
public double exec(double num1, double num2) {
return num1 - num2;
}
}; public abstract double exec(double num1, double num2); public static void main(String[] args) { double addNum = CalculationEnum.ADD.exec(1, 2.2);
System.out.println(addNum);
double subNum = CalculationEnum.SUB.exec(3.2, 1.1);
System.out.println(subNum); } }

Java 基础复习 -- Enum 类的更多相关文章

  1. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  2. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  3. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  4. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  5. 《Java基础复习》—常识与入门

    突然发现自己Java基础的底子不到位,复习! 所记知识会发布在CSDN与博客网站jirath.cn <Java基础复习>-常识与入门 一.Java语言的知识体系图 分为三部分 编程语言核心 ...

  6. Java基础复习之数组

    Java基础复习之:数组 简介 数组(Array):多个相同数据类型按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理 一维数组 一维数组的声明与初始化 int[] id ...

  7. java基础复习记录

    java基础复习记录(数组.对象.异常) 数组 数组的定义 数组是相同类型数据的有序集合.如:篮球队就是一个数组,队员球服上有号码,相当于索引.通过某一个的某一个号码来确认是某一个队员.数组中索引从0 ...

  8. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  9. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

随机推荐

  1. css6——通栏平均分布

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. 车标知识学习网页开发,与Flask通过base64展示二进制图片 #华为云·寻找黑马程序员#

    万法同源 一直觉得可能自己不太适合搞技术,更适合在天桥底下支个摊子说书.技术的东西从来没人关注,扯东扯西的文章莫名的火.之前的一篇文章MarkDown添加图片的三种方式不管是在技术为主的CSDN还是娱 ...

  3. 如何把图片变得炫酷多彩,Python教你这样实现!

    有趣的图片 如何能让图片变得好玩?首先需要让它动起来!可如果是多张图片,我们还可以将其拼接起来组成gif动图,可一张图怎么玩?记得之前写过一个小练习,把一张图片拆分成九宫格的分片图.那么,能否由此下手 ...

  4. Snack3 一个新的微型JSON框架

    Snack3 一个新的微型JSON框架 一个作品,一般表达作者的一个想法.因为大家想法不同,所有作品会有区别.就做技术而言,因为有很多有区别的框架,所以大家可以选择的框架很丰富. snack3.基于j ...

  5. [NACOS HTTP-GET] The maximum number of tolerable server reconnection errors has been reached

    错误的意思是:已达到可容忍的服务器重连接错误的最大数目.有两个解决思路:一个将这个值设置的更大:然后是排查自己连接服务哪儿出了问题.先说在哪儿设置这个值:在拉取nacos服务的注解配置中,添加一个属性 ...

  6. javascript类数组

    一.类数组定义: 而对于一个普通的对象来说,如果它的所有property名均为正整数,同时也有相应的length属性,那么虽然该对象并不是由Array构造函数所创建的,它依然呈现出数组的行为,在这种情 ...

  7. go学习第三天、数据类型

    基本数据类型 bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // alias ...

  8. 小程序如何支持使用 async/await (构建npm版)

    前言 小程序本身是不支持async/await语法的,但有些应用场景,我们使用async/await会使得代码更简洁,也更易于维护,用过都知道是有多爽的.既然小程序不支持,那我们可以借助 fackbo ...

  9. 2019企业linux运维最需要的了解的一些硬件基础知识

    第3章 服务器    245 3.1 电脑的种类    245 3.2 服务器的介绍    246 3.2.1 服务器的类别    246 3.2.2 服务器的性能    247 3.2.3 服务器的 ...

  10. Python之Flask项目开发【入门必学】

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:藤藤菜丶 Flask 安装Flask模块 创建一个Flask项目 运行 ...