Java 枚举enum 枚举的来由 枚举的常用方法 枚举的构造函数 枚举中的方法 枚举继承接口
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 枚举的来由 枚举的常用方法 枚举的构造函数 枚举中的方法 枚举继承接口相关推荐
- java判断输入值是否在数组_java判断特定值是否在数组中的方法
java判断特定值是否在数组中的方法: 使用List:public static boolean useList(String[] arr, String targetValue) { return ...
- 零基础入门 自学 JAVA SE 基础篇(九)instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface)
JAVA SE自学 基础篇 多态 instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface) 目标 父类型与子类型之间的转换及instanceo ...
- java enum 序号_Java的枚举enum示例详解
一. 什么是枚举 枚举是一种数据类型,具有集合的一些特点,可以存放多个元素,但存储对象有限且固定,枚举也有比较常见的使用场景,如我们需要表达性别(男.女),颜色(红.黄.蓝),星期(星期一.星期二.. ...
- Java私有方法解释_java接口中 定义 private 私有方法
在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...
- Java枚举enum以及应用:枚举实现单例模式
枚举作为一个常规的语言概念,一直到Java5才诞生不得不说有点奇怪,以至于到现在为止很多程序员仍然更喜欢用static final的形式去命名常量而不使用,一般情况下,Java程序员用这种方式去实现枚 ...
- java 枚举 下拉框_枚举enum在velocity模板语言中的应用-下拉菜单
1. velocity模板vm页面 语言: #if("add" == $flag) #foreach($elem in $languageEnum) $elem.name #end ...
- Java(enum)枚举用法详解
转载自 Java(enum)枚举用法详解 本篇文章主要介绍了Java 枚举用法详解,枚举的好处:可以将常量组织起来,统一进行管理.有兴趣的可以一起来了解一下. 概念 enum的全称为 enumerat ...
- Java、Mysql、MyBatis 中枚举 enum 的使用
From: https://yulaiz.com/java-mysql-enum/ Java 和 MySql 中都有枚举的概念,合理的使用枚举,可以让代码阅读和数据库数据查询更加直观.高效.那么我们怎 ...
- 0编译器详解_详解Java枚举类型(Enum)中的方法
文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...
最新文章
- qsort七种排序方法
- eclipse 将javaWeb项目转化成maven项目
- sklearn:sklearn.feature_selection的SelectFromModel函数的简介、使用方法之详细攻略
- 盘点那些有“数学味”的建筑
- linux适应环境,Linux从入门到适应(一):VSCode C++环境配置
- 分布式团队_我们说的意思是:我们是一个分布式优先团队
- NYOJ-571 整数划分(三)
- 一.第一周golang学习:--string解析成基本数据类型
- 未来计算机技术的发展趋势有哪些,浅谈计算机技术的发展趋势
- 6502精品仿真软件(联锁)
- python PIL Image 图片叠图、拼接,图片透明度调整 案例
- 查看在线人物 修改金币 元宝 等人物属性
- mixwit怀旧磁带音乐盒
- Ubuntu还需要做什么才能替代Windows
- 领导的沉默,背后到底隐藏着什么?
- EasyRTMP Android安卓手机直播推流摄像头偏暗的问题解决
- 服务器iis短文件名漏洞,IIS短文件名漏洞分析及一个实例
- 机器学习中L1正则化和L2正则化
- 全球及中国散热产业产销规模及投资盈利预测报告2021版
- JAVA中implements的用法