引入编写季节类(Season),该类只有四个对象(spring,summer,autumn,winter)

概念枚举(enum)全称为 enumeration, 是 JDK 1.5 中引入的新特性。

语法

public enum Color{

//默认添加 public static final Color RED,GREEN,BLUE;

}

本质尽管枚举看起来像是一种新的数据类型,实际上,枚举就是一种受限制的类,并且具有自己的方法。创建自己的enum类时,这个类继承自 java.lang.Enum。

public abstract class Enum> implements Comparable, Serializable{

...

}

特点枚举就是一个受限制的类,默认继承Enum

枚举的第一行必须定义该枚举类型的对象

枚举类型对象默认添加: public static final 类型

枚举没有继承明确类(自定义枚举类默认继承Enum,Enum默认继承Object)

枚举类不能被继承

枚举里可以有构造方法、成员方法、静态方法、抽象方法

枚举可以实现接口

枚举里没有定义方法,也可以在最后一个对象后面加逗号、分号或什么都不加

优势增强代码可读性

枚举型可直接与数据库交互

Switch语句优势

编译优势(枚举类编译时,没有把常量值编译到代码中,即使常量值发生改变,也不会影响引用常量的类 )

将常量组织起来,统一管理

去除equals两者判断 由于常量值地址唯一,使用枚举可以直接通过“==”进行两个值之间的对比,性能会有所 提高

枚举的方法

方法名解释Enum.valueOf(Class enumType, String name)根据字符串找到该枚举类中的对象public static void values()获取该枚举类对象数组public static void valueOf(String args0)根据字符串获取该枚举类中的对象public final String name()获取该枚举对象名字public final Class getDeclaringClass()获取枚举对象的枚举类型相对应的Class对象public final int hashCode()获取该枚举对象的hash值public final int compareTo(E o)两个枚举对象进行比较public final boolean equals(Object other)比较两个枚举对象是否相同

枚举案例 - 状态机

enum Signal{RED, YELLOW, GREEN}

public class EnumTest {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.println("请输入信号灯:RED,YELLOW,GREEN");

Signal signal = Signal.valueOf(scan.next());

String instruct = getTrafficInstruct(signal);

System.out.println(instruct);

scan.close();

}

public static String getTrafficInstruct(Signal signal) {

String instruct = "信号灯故障";

switch (signal) {

case RED:

instruct = "红灯停";

break;

case YELLOW:

instruct = "黄灯请注意";

break;

case GREEN:

instruct = "绿灯行";

break;

default:

break;

}

return instruct;

}

}

枚举案例 - 错误码

public enum ErrorCodeEn {

Ok(1,"成功"),ERROR_A(2,"错误A"),ERROR_B(2,"错误B");

private int code;//状态码 private String description;//状态信息

ErrorCodeEn(){}

ErrorCodeEn(int code,String description){

this.code = code;

this.description = description;

}

public int getCode() {

return code;

}

public String getDescription() {

return description;

}

}

枚举案例 - 组织枚举含义:可以将类型相近的枚举通过接口或类组织起来(但是一般用接口方式进行组织)

原因是:

Java接口在编译时会自动为enum类型加上public static修饰符;

Java类在编译时会自动为 enum 类型加上static修饰符;

就是说,在类中组织 enum,如果你不给它修饰为 public,那么只能在本包中进行访问。

public interface IErrorCode {

enum LoginErrorCodeEn implements INumberEnum{

OK(1,"登录成功"),ERROR_A(-1,"验证码错误"),ERROR_B(-2,"密码错误"),ERROR_C(-3,"用户已登录");

private int code;

private String description;

LoginErrorCodeEn(int code,String description){

this.code = code;

this.description = description;

}

@Override

public int getCode() {

return code;

}

@Override

public String getDescription() {

return description;

}

}

enum RigsterErrorCodeEn implements INumberEnum{

OK(1,"注册成功"),ERROR_A(-1,"账号已存在");

private int code;

private String description;

RigsterErrorCodeEn(int code,String description){

this.code = code;

this.description = description;

}

@Override

public int getCode() {

return code;

}

@Override

public String getDescription() {

return description;

}

}

}

interface INumberEnum {

int getCode();

String getDescription();

}

枚举案例 - 策略枚举优点:这种枚举通过枚举嵌套枚举的方式,将枚举常量分类处理。

这种做法虽然没有switch语句简洁,但是更加安全、灵活。

public enum Salary {

JAVA(SalaryType.TEACHER),

HTML(SalaryType.TEACHER),

PYTHON(SalaryType.TEACHER),

PRINCIPAL(SalaryType.ADMINISTRATION);//校长

private final SalaryType salaryType;

Salary(SalaryType salaryType){

this.salaryType = salaryType;

}

//baseSalary-底薪 classHour-课时 teachingHourSubsidy-课时费 achievements-绩效 double getSalary(double baseSalary,int classHour,double teachingHourSubsidy,double achievements){

return salaryType.getSalary(baseSalary, classHour, teachingHourSubsidy, achievements);

}

//策略枚举 private enum SalaryType {

TEACHER {//老师 @Override

double getSalary(double baseSalary, int classHour, double teachingHourSubsidy,

double achievements) {

return baseSalary + classHour*teachingHourSubsidy + achievements;

}

},

ADMINISTRATION {//行政人员 @Override

double getSalary(double baseSalary, int classHour, double teachingHourSubsidy,

double achievements) {

return baseSalary + achievements;

}

};

abstract double getSalary(double baseSalary,int classHour,double teachingHourSubsidy,double achievements);

}

}

枚举工具类 - EnumSet 和 EnumMapJava 中提供了两个方便操作enum的工具类——EnumSet 和 EnumMap。

EnumSet :枚举类型的高性能 Set实现。它要求放入它的枚举常量必须属于同一枚举类型。 EnumMap :专门为枚举类型量身定做的 Map 实现。虽然使用其它的 Map 实现(如HashMap)也能完成枚举类型实例到值得映射,但是使用 EnumMap 会更加高效,因为它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,所以 EnumMap 使用数组来存放与枚举类型对应的值。这使得 EnumMap 的效率非常高。

public class EnumTest {

public static void main(String[] args) {

//EnumSet的使用 //把Signal枚举中所有对象抽取到Set集合中 EnumSet signalSet = EnumSet.allOf(Signal.class);

for (Enum en : signalSet) {

System.out.println(en);

}

//EnumMap的使用 EnumMap enumMap = new EnumMap<>(Signal.class);

enumMap.put(Signal.RED, "红灯");

enumMap.put(Signal.YELLOW, "黄灯");

enumMap.put(Signal.GREEN, "绿灯");

//把所有的映射关系对象抽取到Set集合中 Set> entrySet = enumMap.entrySet();

for (Entry entry : entrySet) {

Signal key = entry.getKey();

Object value = entry.getValue();

System.out.println(key + " -- " + value);

}

}

}

enum Signal{RED, YELLOW, GREEN}

java枚举工具类_Java 枚举相关推荐

  1. java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...

    Java PDF工具类(一)| 使用 itextpdf 根据设置好的PDF模板填充PDF(文字和图片) 相关文章: Java PDF工具类(二)| 使用 wkhtmltox 实现 HTML转PDF(文 ...

  2. java 解压缩 工具类_Java实现的zip压缩及解压缩工具类示例

    本文实例讲述了Java实现的zip压缩及解压缩工具类.分享给大家供大家参考,具体如下: import java.io.BufferedInputStream; import java.io.Buffe ...

  3. java常用工具类_java(二):工作中常用到的工具类

    工作中大家要用到很多工具类,第三方的jar中有很多现成的工具类符合自己的项目需要,这个时候就不需要去重复造轮子了,从而节省了很多时间,大家可以利用这些时间去做其它重要的事情,如果没有符合自己的工具类, ...

  4. java udp 工具类_java基于UDP实现图片群发功能

    UDP协议(用户数据报协议)是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但是这两个Socket之间并没有虚拟链路,这两个Socket只是发送,接收数据报的对象. UDP的优缺点: ...

  5. java 加减乘除 工具类_Java数学工具类MathUtil详解

    package cn.xbz.util.math; import java.math.BigDecimal; /** * @title 数学计算工具类 * @description 提供常用的数值加减 ...

  6. java cron工具类_Java工具类之:包装类

    我们都知道,JDK 其实给我们提供了很多很多 Java 开发者已经写好的现成的类,他们其实都可以理解成工具类,比如我们常见的集合类,日期相关的类,数学相关的类等等,有了这些工具类,你会发现它能很大程度 ...

  7. java json 工具类_Java中JSON处理工具类使用详解

    本文实例为大家分享了JSON处理工具类的具体代码,供大家参考,具体内容如下 import java.io.IOException; import java.util.Date; import java ...

  8. java aes 工具类_Java中的AES加解密工具类:AESUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...

  9. java escape工具类_java开发常用工具类

    在Java中,,工具类定义了一组公共方法.你把你的类继承这些类或者实现这些接口,就可以使用这些类的方法了.下面给大家介绍一下十六种最常用的java开发常用工具类. 一. org.apache.comm ...

最新文章

  1. 【蓝桥杯Java_C组·从零开始卷】第二节、ifswitch(超级详细,适合入门强化学习,理论与实战双保险(2021年12月30日上午9点直播·视频发布B站)
  2. 剑指offer java版(一)
  3. MySQL视图的应用
  4. 无法注册这篇文档........
  5. 开发板添加上 Web 界面+openwrt luci界面修改
  6. Svn分支管理的使用(三)
  7. 网站地图(sitemap)在线生成
  8. 利用SSRF攻击Redis
  9. C 二维数组,以及自定义二维数组
  10. ALG 求单峰的位置
  11. SparkStreaming 实现广告计费系统中在线黑名单过滤实战
  12. 租用服务器如何选择带宽,带宽越大越好吗
  13. 风口上的低代码:诱人的故事,危险的豪赌
  14. Microbiome | 二氧化碳浓度升高改变小麦根际微生物群落组成和代谢以矿化有机磷...
  15. Day8--复数和复变函数之拉普拉斯变换及反变换和Z变换及反变换
  16. 笔记本电脑快速连接手机热点的方法
  17. [Error] expected primary-expression before ‘%’
  18. win11下MSVC++ 6.0无法启动问题
  19. 用VBS代码写PPT/PPTX批量转PDF,绝对可用,本人就在用着……ppt转pdf代码
  20. 浪涌电流——原因、影响、保护电路和设计技术

热门文章

  1. Struts2框架学习---ONE
  2. MYSQL 获得当前日期时间 函数 当前时间后一月
  3. (C语言)实验设备管理系统——源代码和解析(博主复习用)
  4. windows Git TAB键换行缩进问题
  5. 临洮二中高考2021成绩查询,凝心聚力备高考 策马扬鞭励精神 ——临洮二中2021届高三誓师大会...
  6. 努比亚 IT软件笔试 2017
  7. const指针与指向const的指针
  8. 部署一个 Containerd 容器运行时的 Kubernetes 集群
  9. 文心大模型之我爱我家
  10. Python实操模拟题