Java5新增的特性,一种特殊的类型。本质上是一个类,但是有特殊的约束。这些约束让枚举更简洁、安全。

枚举本质是在一个常量集合,一个属于同一类型的常量集合。比如:四季(春夏秋冬)、星期(一到七)

1.枚举的来由

没有枚举enum时,我们需要定义一组常量,如下:

public class Day {
​public static final int MONDAY =1;
​public static final int TUESDAY=2;
​public static final int WEDNESDAY=3;
​public static final int THURSDAY=4;
​public static final int FRIDAY=5;
​public static final int SATURDAY=6;
​public static final int SUNDAY=7;
​
}

使用枚举

enum Day {MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

枚举对象编译

//反编译Day.class
final class Day extends Enum
{//编译器为我们添加的静态的values()方法public static Day[] values(){return (Day[])$VALUES.clone();}//编译器为我们添加的静态的valueOf()方法,注意间接调用了Enum也类的valueOf方法public static Day valueOf(String s){return (Day)Enum.valueOf(com/zejian/enumdemo/Day, s);}//私有构造函数private Day(String s, int i){super(s, i);}//前面定义的7种枚举实例public static final Day MONDAY;public static final Day TUESDAY;public static final Day WEDNESDAY;public static final Day THURSDAY;public static final Day FRIDAY;public static final Day SATURDAY;public static final Day SUNDAY;private static final Day $VALUES[];
​static {    //实例化枚举实例MONDAY = new Day("MONDAY", 0);TUESDAY = new Day("TUESDAY", 1);WEDNESDAY = new Day("WEDNESDAY", 2);THURSDAY = new Day("THURSDAY", 3);FRIDAY = new Day("FRIDAY", 4);SATURDAY = new Day("SATURDAY", 5);SUNDAY = new Day("SUNDAY", 6);$VALUES = (new Day[] {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY});}
}

2 枚举的常用方法

枚举相当于一个集合(数组)

方法名称 返回类型 方法说明
values() [],枚举数组 返回所有枚举里的数据
ordinal() int 返回枚举的下标,从0开始
name() String 返回枚举常量的名称
valuesOf(class,name) <T extends Enum<T>> 返回带有指定名称的枚举常量
compareTo(E o) int 比较此枚举与指定对象的顺序
DayEnum[] de = DayEnum.values(); //返回所有枚举里的数据
for (int i = 0; i < de.length; i++) {System.out.println("枚举下标位置:" + de[i].ordinal()); //返回枚举的下标System.out.println("枚举的名称:" + de[i].name());//返回枚举常量的名称
}
​
System.out.println(DayEnum.valueOf(DayEnum.class,de[0].name()));//返回带有指定名称的枚举常量
System.out.println(de[0].compareTo(de[1]));//本质通过ordinal()比较

3 枚举的构造函数

定义枚举构造方法,添加对枚举常量的描述。枚举的构造方法只能是私有的

public enum Day2 {
​MONDY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),THURSDAY("星期四"),FRIDAY("星期五"),SATURDAY("星期六"),SUNDAY("星期七");
​private String desc;private Day2(String desc){//构造方法this.desc = desc;}
​public String getDesc() {//普通方法return desc;}
}

4 枚举中的方法

普通方法

同3.3getDesc(),与普通方法没有区别

public String getDesc() {//普通方法return desc;
}

重写方法

所有枚举的父类均为Enum类,但Enum类的方法除了toString(),均为final方法,不能被重写

@Override
public String toString() {return desc;
}  

抽象方法

枚举类也可以定义抽象方法,但是每个枚举都需要重写该抽象方法

public enum Day3 {MONDAY("星期一"){@Overridepublic String getInfo() {return "";}};Day3(String desc){this.desc = desc;}private String desc;public abstract String getInfo();//抽象方法
}

5 枚举与接口

Java为单继承,所有enum都集成抽象类Enum,所以enum只能实现接口

枚举实现接口使用场景:菜单,所有菜品均属于Food类型,但是菜单又分为appetizer(开胃菜)、mainCourse(主菜)、dessert(点心)、Coffee等等

public interface Food {enum Appetizer implements Food {SALAD, SOUP, SPRING_ROLLS;}enum MainCourse implements Food {LASAGNE, BURRITO, PAD_THAI,LENTILS, HUMMOUS, VINDALOO;}enum Dessert implements Food {TIRAMISU, GELATO, BLACK_FOREST_CAKE,FRUIT, CREME_CARAMEL;}enum Coffee implements Food {BLACK_COFFEE, DECAF_COFFEE, ESPRESSO,LATTE, CAPPUCCINO, TEA, HERB_TEA;}
}

Java 枚举enum 枚举的来由 枚举的常用方法 枚举的构造函数 枚举中的方法 枚举继承接口相关推荐

  1. java判断输入值是否在数组_java判断特定值是否在数组中的方法

    java判断特定值是否在数组中的方法: 使用List:public static boolean useList(String[] arr, String targetValue) { return ...

  2. 零基础入门 自学 JAVA SE 基础篇(九)instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface)

    JAVA SE自学 基础篇 多态 instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface) 目标 父类型与子类型之间的转换及instanceo ...

  3. java enum 序号_Java的枚举enum示例详解

    一. 什么是枚举 枚举是一种数据类型,具有集合的一些特点,可以存放多个元素,但存储对象有限且固定,枚举也有比较常见的使用场景,如我们需要表达性别(男.女),颜色(红.黄.蓝),星期(星期一.星期二.. ...

  4. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  5. Java枚举enum以及应用:枚举实现单例模式

    枚举作为一个常规的语言概念,一直到Java5才诞生不得不说有点奇怪,以至于到现在为止很多程序员仍然更喜欢用static final的形式去命名常量而不使用,一般情况下,Java程序员用这种方式去实现枚 ...

  6. java 枚举 下拉框_枚举enum在velocity模板语言中的应用-下拉菜单

    1. velocity模板vm页面 语言: #if("add" == $flag) #foreach($elem in $languageEnum) $elem.name #end ...

  7. Java(enum)枚举用法详解

    转载自 Java(enum)枚举用法详解 本篇文章主要介绍了Java 枚举用法详解,枚举的好处:可以将常量组织起来,统一进行管理.有兴趣的可以一起来了解一下. 概念 enum的全称为 enumerat ...

  8. Java、Mysql、MyBatis 中枚举 enum 的使用

    From: https://yulaiz.com/java-mysql-enum/ Java 和 MySql 中都有枚举的概念,合理的使用枚举,可以让代码阅读和数据库数据查询更加直观.高效.那么我们怎 ...

  9. 0编译器详解_详解Java枚举类型(Enum)中的方法

    文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...

最新文章

  1. qsort七种排序方法
  2. eclipse 将javaWeb项目转化成maven项目
  3. sklearn:sklearn.feature_selection的SelectFromModel函数的简介、使用方法之详细攻略
  4. 盘点那些有“数学味”的建筑
  5. linux适应环境,Linux从入门到适应(一):VSCode C++环境配置
  6. 分布式团队_我们说的意思是:我们是一个分布式优先团队
  7. NYOJ-571 整数划分(三)
  8. 一.第一周golang学习:--string解析成基本数据类型
  9. 未来计算机技术的发展趋势有哪些,浅谈计算机技术的发展趋势
  10. 6502精品仿真软件(联锁)
  11. python PIL Image 图片叠图、拼接,图片透明度调整 案例
  12. 查看在线人物 修改金币 元宝 等人物属性
  13. mixwit怀旧磁带音乐盒
  14. Ubuntu还需要做什么才能替代Windows
  15. 领导的沉默,背后到底隐藏着什么?
  16. EasyRTMP Android安卓手机直播推流摄像头偏暗的问题解决
  17. 服务器iis短文件名漏洞,IIS短文件名漏洞分析及一个实例
  18. 机器学习中L1正则化和L2正则化
  19. 全球及中国散热产业产销规模及投资盈利预测报告2021版
  20. JAVA中implements的用法

热门文章

  1. python初始化list天坑
  2. 云媒易:学会这四点,让你的抖音短视频快速获取流量
  3. excel批量去掉前面的空格
  4. 如何将照片里的脖子和脸PS成同一个颜色
  5. 用单反相机拍摄VR全景时参数设置怎么调?
  6. 【步态识别】多视角3D卷积网络的步态识别 算法学习《MULTI-VIEW GAIT RECOGNITION USING 3D CONVOLUTIONAL NEURAL NETWORKS》
  7. 无符号、有符号数运算判溢出
  8. 可能就蛮好了呢,哈哈哈哈
  9. Linux安装指定版本的Unity3D
  10. 用Python一键修改上万个文件名(大哥,别右键重命名了好吗???)