1.什么是枚举用enum修饰是一种特殊的类,但枚举是类,使用枚举可以很方便的定义常量

枚举的概念:枚举类是一种特殊形式的Java类,枚举类的对象个数是有限且明确的

为什么需要枚举:
因为一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值

自定义枚举类

package cn.tedu.exec;
/*JDK1.8之前 枚举类定义和使用*///自定义枚举class Season {/*1.枚举类中声明的每一个枚举值代表枚举类的一个实例对象2.与Java中的普通类一样在声明枚举类时也可以声明属性方法和构造函数3.但是枚举类的构造函数必须为私有的4.枚举都必须要大写*///1.私有化常量类型private final String SEASON_NAME;private final String SEASON_DEAE;//2.私有化形参构造器private Season(String SEASON_NAME, String SEASON_DEAE) {this.SEASON_NAME = SEASON_NAME;this.SEASON_DEAE = SEASON_DEAE;}//3.公共静态常量创建对象public static  final Season SPRING=new Season("春天","春暖花开");public static  final Season SUMMER=new Season("夏天","夏日炎炎");public static  final Season AUTUMM=new Season("秋天","秋高气爽");public static  final Season WINTER=new Season("冬天天","寒风凛凛");//4.提供get方法public String getSEASON_NAME() {return SEASON_NAME;}public String getSEASON_DEAE() {return SEASON_DEAE;}//5.重写toString方法@Overridepublic String toString() {return "Season{" +"SEASON_NAME='" + SEASON_NAME + '\'' +", SEASON_DEAE='" + SEASON_DEAE + '\'' +'}';}
}
class  SeasonTest {public static void main(String[] args) {//1.打印通过类名调用对象获取get方法System.out.println(Season.SPRING.getSEASON_NAME());System.out.println(Season.SUMMER.getSEASON_NAME());//2.使用类名调用对象获取toStringSystem.out.println(Season.AUTUMM);}
}

使用枚举enum实现枚举类

package cn.tedu.exec;import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import org.w3c.dom.ls.LSOutput;/*JDK1.8之后使用定义枚举和使用*/
//使用enum关键字定义枚举类
enum Food{/*1.public static final可以省略不写2.枚举对象不能像自定义枚举类对象时new3.枚举名1(值1,值2),枚举名2(值1,值2),枚举名3(值1,值2);4.不需要生成toString,因为使用enum关键字定义的枚举类继承了java.lang.Enum5.在Enum中重写了继承自Object的toString()直接打印的就是枚举名*///1.通过枚举名传形参HAMBURG("汉堡","又大又扁"),BEEF("牛肉","肉质柔软"),MUTTON("羊肉 ","烹调的香味");//2.私有化常量类型private  final String FOOD_NAME;private  final String FOOD_DESE;//3.提供枚举形参构造器Food(String FOOD_NAME, String FOOD_DESE) {this.FOOD_NAME = FOOD_NAME;this.FOOD_DESE = FOOD_DESE;}//4.提供get方法public String getFOOD_NAME() {return FOOD_NAME;}public String getFOOD_DESE() {return FOOD_DESE;}
}
/*
食物测试类*/
class  TestFood{public static void main(String[] args) {//1.通过枚举类调用枚举名获取类型名System.out.println(Food.HAMBURG.getFOOD_NAME());System.out.println(Food.BEEF.getFOOD_NAME());System.out.println(Food.MUTTON.getFOOD_NAME());//2.通过枚举类调用枚举名获取类型描述System.out.println(Food.HAMBURG.getFOOD_DESE());System.out.println(Food.BEEF.getFOOD_DESE());System.out.println(Food.MUTTON.getFOOD_DESE());}
}

总结新的知识点:

枚举的作用分为 
1.限定用户输入的值,保证安全,有效性2.快速找到所需要的值
枚举的本质:整型的字面值,效率高 3.枚举类型更规范,在函数形参定义为枚举类型的时候,
4.只接受枚举类型的常量,比起普通的更安全,5.枚举类型成员默认被public static final修饰

使用枚举类的好处
 1.提高代码的维护性,确保变量合法 2.提高代码可读性 3.提高代码键入

枚举类的底层实现
枚举类在后台实现时,实际上是转化为一个继承了java.lang.Enum类的实体类,
原先的枚举类型变成对应的实体类型,
并且会生成一个新的构造函数,若原来有构造函数,
则在此基础上添加两个参数,生成新的构造函数

枚举类是线程安全的 为什么是线程安全的 
1.我们定义的一个枚举,在第一次被真正用到的时候,
会被虚拟机加载并初始化,而这个初始化过程是线程安全的。而我们知道,解决单例的并发问题,
主要解决的就是初始化过程中的线程安全问题 2.由于枚举的以上特性,枚举实现的单例是天生线程安全的

枚举类的特点:
1.所有的枚举类都是Enum的子类 2.我们可以通过枚举类名 枚举项名称 去访问指定的枚举项
3.每个枚举类项其实就是该枚举的一个对象 4.枚举也是一个类,也可以去定义一个成员变量
5.枚举类的第一行上必须是枚举项 最后一个枚举项后的分后是可以省略的 但是如果枚举类有其他的东西
这个分号就不能省略 建议不要省略
6.枚举类可以有构造器和构造函数 但必须是private的 它默认的也是private的 枚举项的用法比较特殊 
枚举("");
7.枚举类也可以有抽象方法 但是枚举项必须重写该方法

JAVA的枚举定义和使用相关推荐

  1. java如何枚举定义一个数组_java 枚举(Enum)笔记

    枚举 枚举类型是指由一组固定的常量组成合法的类型,由 enum 关键字来定义一个枚举类型. 定义 pulic enum Season{ SPRING(1),SUMMER(2),AUTUMN(3),WI ...

  2. java如何枚举定义一个数组_Java中如何将字符枚举类变成一个数组

    ( light. class ); currenummap.put(light. red , " 红灯 " ); currenummap.put(light. green , &q ...

  3. 深度分析Java的枚举类型——枚举的线程安全性及序列化问题

    点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...

  4. JSP 调用java 常量 枚举

    JSP 调用java 常量 枚举 JAVA:public enum ReimStatus {UNCONFIRMED ("118001"), //未确认 DISPATCH_VERIF ...

  5. Java Enum 枚举

    Java Enum(枚举)是一个Java类 enum TestEnum{     a("Foo1"),b("Foo2"),c("Foo3") ...

  6. java enum优点_你需要关注的 Java Enum 枚举的几个细节

    枚举是一个非常古老的语言特性,用来实现具名的有限集合,在 C/C++ 中使用广泛.而 Java 在 Java SE5 才引入枚举.也许语言设计者觉得既然是后引入该特性,那么一定要在这个特性上支持比其他 ...

  7. 19、java中枚举

    枚举是什么? 枚举就是将一个有限集合中的所有元素列举出来,在java中使用可以使用enum关键字来声明一个枚举类. 为什么使用枚举? 之前当用到一些常量时,便临时声明一个,这样使得代码看起来很乱,这里 ...

  8. Java中枚举的线程安全性及序列化问题

    转载自  Java中枚举的线程安全性及序列化问题 Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序 ...

  9. 使用枚举定义常量更好点儿

    大家好,欢迎来到雄雄的小课堂,昨天给大家分享的是"java中的Queue队列的用法示例",今天,分享的主题是"java中,推荐使用枚举定义常量". 前言:常量, ...

最新文章

  1. pom.xml中的dependencyManagement
  2. tp5某个字段相同的数据只取一次_多维分析数据仓库建设建议-面向主题的建模...
  3. Android --- RecycleView 中默认选择第一个 item,点击第 2 个 item 时改变其字体样式,其余的 item 的字体样式恢复默认
  4. Linux 实践操作
  5. sprint冲刺计划第七天团队任务
  6. 原来你是这样的Promise
  7. Mac 如何寻找Mac自带的IDLE
  8. 基于JAVA+SpringMVC+MYSQL的家政服务平台
  9. 数据结构与算法之四希尔排序法
  10. 多线程笔记--原子操作Interlocked系列函数
  11. html网页代码入门,html 网页入门(示例代码)
  12. python程序设计pdf上海交大_上海交大2011_2012程序设计python期末考试题
  13. 敏感词在线检测工具-免费敏感词在线检测工具
  14. ask调制matlab实验,ASK调制的matlab代码
  15. 【Web理论篇】Web应用程序安全与风险
  16. python生成图像公章_科学网—python pillow库 python界的ps 实现数据批量盖章 并打包成exe - 李鸿斌的博文...
  17. 本地配置微信H5测试
  18. rpc系列-动态代理
  19. SAP中会计凭证红蓝冲相关分析测试笔记
  20. 高通MTK麒麟 手机平台USB3.0方案对比

热门文章

  1. android 收费吗,安卓系统会收费吗 安卓系统什么时候开始收费
  2. 两只蚂蚁打得过一头大象吗?这两家网络安全公司的老板想试试
  3. 2020 年 “联想杯”全国高校程序设计在线邀请赛暨第三届上海理工大学程序设计竞赛题解
  4. Flutter实现微信支付和iOS IAP支付,老师讲的真棒
  5. checkbox自定义样式
  6. Dynamics 365 讲清楚Security Role中的Append AppendTo
  7. UE4 材质笔记之岩石(法线初级应用)
  8. latex显示引用显示问号
  9. 基于遗传算法求解车辆路径问题
  10. 记录《Binaural Audio Generation via Multi-task Learning》的h5文件制作过程