目录:

  • 前言
  • 一.枚举的简介
    • 1.枚举的引出(自定义枚举)
    • 2.使用enum关键字
    • 3.注意事项(enum关键字实现枚举)
  • 二.枚举的使用
  • 三.枚举常用方法
  • 四.枚举使用细节

前言

最近在回顾JavaSE部分的知识,对一些薄弱的知识进行记录,学习方式,通过视频和图书的进行学习,视频看B站韩顺平老师的30天学会Java,图书看Java核心技术 卷I 基础知识(原书第10版)。

韩顺平30天学会Java地址:https://www.bilibili.com/video/BV1fh411y7R8?p=425

一.枚举的简介

1.枚举的引出(自定义枚举)

需求:创建一个季节对象(Season),该对象包含季节名称和描述

package com.dudu.enumerone;public class Season {private String name;private String desc;public Season(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}
}class Test{public static void main(String[] args) {Season spring = new Season("春天","温暖");Season winter = new Season("冬天", "寒冷");Season summer = new Season("夏天", "炎热");Season autumn = new Season("秋天", "凉爽");}}

上面的代码是可以完成我们的需求,但是我们可以知道,季节对象是固定的(春夏秋冬),不会出现其他季节了,如果我们再增加一个Season对象,这时候就会打破这种固定的季节,显然这种方式并不完美!

进一步完善
分析Season对象的特点:

  • 季节的值是有限的几个值(spring,summer,autumn,winter)
  • 只读,不需要修改

根据上面的特点设计如下代码:

package com.dudu.enumerone;public class Season {private String name;private String desc;public static final Season SPRING = new Season("春天","温暖");public static final Season WINTER = new Season("冬天", "寒冷");public static final Season SUMMER = new Season("夏天", "炎热");public static final Season AUTUMN = new Season("秋天", "凉爽");private Season(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}public void setName(String name) {this.name = name;}public void setDesc(String desc) {this.desc = desc;}
}class Test{public static void main(String[] args) {System.out.println("季节:"+Season.SPRING.getName()+"描述:"+Season.SPRING.getDesc());System.out.println("季节:"+Season.WINTER.getName()+"描述:"+Season.WINTER.getDesc());System.out.println("季节:"+Season.SUMMER.getName()+"描述:"+Season.SUMMER.getDesc());System.out.println("季节:"+Season.AUTUMN.getName()+"描述:"+Season.AUTUMN.getDesc());}}

运行效果:

注意:
(这里的不可修改表示的是无法改为指向其他对象,但其指向的对象本身是可以被修改的。)

final修饰的引用对象无法指向其他对象:

对象本身可以修改:

运行效果:

2.使用enum关键字

枚举(enumeration,简写enum),是一组常量集合,属于一种特殊的类,里面只包含一组有限的特定的对象。

在上面的代码中,Season类里面无非就是包含四组常量对象(spring,summer,autumn,winter),这非常符合枚举的定义,我们可以使用enum关键字来实现。

package com.dudu.enumerone;public enum SeasonEnum {SPRING("春天","温暖"),SUMMER("夏天","炎热"),AUTUMN("秋天","凉爽"),WINTER("冬天","寒冷");private SeasonEnum(String name, String desc) {this.name = name;this.desc = desc;}private String name;private String desc;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}
}class  Test_Enum{public static void main(String[] args) {System.out.println("季节:"+SeasonEnum.SPRING.getName()+"描述:"+SeasonEnum.SPRING.getDesc());System.out.println("季节:"+SeasonEnum.WINTER.getName()+"描述:"+SeasonEnum.WINTER.getDesc());System.out.println("季节:"+SeasonEnum.SUMMER.getName()+"描述:"+SeasonEnum.SUMMER.getDesc());System.out.println("季节:"+SeasonEnum.AUTUMN.getName()+"描述:"+SeasonEnum.AUTUMN.getDesc());}
}

运行效果:

我们会发现SeasonEnum(使用enum关键字)和上面设计的Season类非常相识,只有二处不同:

  • Season使用的是Class关键字是一个类,而SeasonEnum使用的是enum关键字

  • SeasonEnum中的常量对象类似于Season的简写方式

其实Season类这种方式也是实现枚举的一种方式,即自定义枚举类型。
Season类反编译原码:

SeasonEnum反编译源码(enum关键字本质上还是一个类(class),只是该类会继承Enum抽象类):

3.注意事项(enum关键字实现枚举)

  • 当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类
  • 传统的( public static final Season SPRING = new Season("春天","温暖");)这种方式简化成 SPRING("春天","温暖"), ,这里必须知道,它调用的是那个构造器
  • 如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略
  • 当有多个枚举对象时,使用 , 间隔,最后有一个分号结尾 ;
  • 枚举对象必须放在枚举的行首

如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略:

枚举对象必须放在枚举的行首:

二.枚举的使用

需求,使用无参构造器,创建一个颜色(Color)枚举,包含三个常量(RED,GREEN,YELLOW)

代码如下:

package com.dudu.enumerone;public enum Color {RED,GREEN,YELLOW;
}class  Test_ColorEnum{public static void main(String[] args) {Color color = Color.RED;Color color1 = Color.RED;System.out.println(color);System.out.println(color == color1);}
}

运行效果:

  • 第一个输出 RED 是Color通过调用父类Enum类的toString()方法返回的name(这里的name就是RED)
  • 第二个输出返回 true,这是因为RED是一个Static的静态常量,作用在类上(地址和值都相同),color和color1指向的是同一个地址

三.枚举常用方法

说明:使用关键字enum时,会隐式继承Enum类,这样我们就可以使用Enum类相关的方法。

package com.dudu.enumerone;public class EnumMethod {public static void main(String[] args) {// name():返回枚举对象的名字System.out.println(SeasonEnum.AUTUMN.name());// ordinal():返回枚举对象的次序(从0开始编号)System.out.println(SeasonEnum.AUTUMN.ordinal());// values():返回定义的所有枚举对象SeasonEnum[] seasonEnums =  SeasonEnum.values();for (SeasonEnum seasonEnum:seasonEnums){System.out.println(seasonEnum);}// valueOf():将字符串转换成枚举对象,要求该字符串必须为已有的常量名,否则会报错SeasonEnum seasonEnum = SeasonEnum.valueOf("SPRING");System.out.println(seasonEnum.getName());// compareTo():比较二个枚举常量,比较的是编号(前一个的编号减后一个的编号) self.ordinal - other.ordinalSystem.out.println("SPRING的编号为"+SeasonEnum.SPRING.ordinal());System.out.println("AUTUMN的编号为"+SeasonEnum.AUTUMN.ordinal());System.out.println("SPRING的编号 - AUTUMN的编号为"+(SeasonEnum.SPRING.ordinal()-SeasonEnum.AUTUMN.ordinal()));System.out.println("SPRING和AUTUMN比较的编号为"+SeasonEnum.SPRING.compareTo(SeasonEnum.AUTUMN));}
}

运行效果:

四.枚举使用细节

  • 使用enum关键字后,就不能再继承其它类,因为enum会隐式继承Enum,而Java是单继承机制。
  • 枚举类和普通类一样,可以实现接口,如: enum 类名 implements 接口1,接口2{}

使用enum关键字后,就不能再继承其它类:

枚举类和普通类一样,可以实现接口:

运行效果:

Java基础枚举(enum关键字)相关推荐

  1. Java基础——枚举类的使用教程

    目录 枚举类的理解 自定义枚举类 代码实现: Enum关键字 使用enum定义枚举类 代码实现: Enum类中常用方法 枚举类的理解 枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允 ...

  2. Java基础——枚举 (详解)

    什么是枚举 Java中的枚举是一种类型,顾名思义:就是一个一个列举出来.所以它一般都是表示一个有限的集合类型,它是一种类型,在维基百科中给出的定义是: 在数学和计算机科学理论中,一个集的枚举是列出某些 ...

  3. java中枚举enum

    JDK1.5引入了枚举类型.枚举类型的定义包括枚举声明和枚举体.枚举体就是放置一些常量. 定义枚举要使用enum关键字.对于性别.季节.星期几等内容,如果定义为字符串类型,是很难限制其取值的.采用枚举 ...

  4. Java基础之static关键字的用法

    Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例.         静态(static)可以是: 变 ...

  5. 【Java基础】final关键字总结

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  6. JavaSE 18 Java基础语法 → 标识符关键字

    4.2 标识符和关键字 4.2.1 标识符 标识符是 $.下划线和字母开头,然后又由下划线.字母.数字组成,不能有特殊符号,也不能是关键字!标识符 对大小写是 非常敏感的.(当然可以 使用 中文 命名 ...

  7. java基础——枚举

    2019独角兽企业重金招聘Python工程师标准>>> 枚举就是一组具名的值的有限集合,可以作为常规组件使用. 1.枚举关键字为enum,声明枚举的类自动继承java.lang.En ...

  8. java基础-枚举和注解

    枚举类的使用 如何自定义枚举类 如何使用关键字enum定义枚举类 Enum类的主要方法 实现接口的枚举类 类的对象只有有限个,确定的.举例如下: 星期:Monday(星期一)........Sunda ...

  9. Java基础之this关键字的作用

    this关键字主要存在三种应用 1.this调用本类中的属性,也就是说调用类中的成员变量: 2.this调用本类中的其他方法: 3.this调用本类中的其他构造方法,调用时要放在构造方法的首行,否则会 ...

  10. java关键字整理_【java基础知识整理】java基础语法之关键字

    一.continue与break continue与break基本都使用与循环中,但是continue指结束所有循环的当前循环,而break是指结束整个循环.下面用代码进行简单实例. 使用contin ...

最新文章

  1. class 与 原型链 解析
  2. 【HDU - 5627】Clarke and MST(最大生成树,与运算性质,最小生成树MST变形)
  3. 2021计算机一级模拟29套,“智慧家”2021年第二十九期每周家庭套餐
  4. jdbc连接oracle_Oracle数据库性能监控|使用SiteScope 监控Oracle
  5. 词类与句子成分对应关系 —— 状语篇
  6. 24V转12V10A带使能脚同步整流AH2305D
  7. Summer Project
  8. 超级好用的cmd工具软件:Cmder
  9. 中国法定节假日天数以及世界各国放假天数
  10. ROS2—服务(Service)
  11. linux ntp时间同步失败,SUSE linux ntp时间不同步问题
  12. 小程序接入h5页面_小程序与H5如何互相跳转
  13. Packet Tracer(第二期)--4RIP
  14. Layui table表格操作列,按钮过多时展开点击失效问题解决方法
  15. Java中map的含义
  16. mysql密码参数_MySQL 密码参数配置与修改 validate_password
  17. android平板吃鸡开什么画质,ipad2018玩吃鸡可以开什么画质 | 手游网游页游攻略大全...
  18. 使用C# 开发报价系统
  19. JAVA多线程:守护线程 setDaemon全方位剖析| 守护线程是线程吗 |thread.isAlive()反思(五)
  20. 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 8月9日

热门文章

  1. 传承开源-耿航2018中国开源云超级人物获奖感言
  2. Apache基金会获得Pineapple基金88.34比特币捐赠
  3. 毕设题目:Matlab数字信号去噪
  4. 【TSP】基于matlab改进的人工鱼群算法求解旅行商问题【含Matlab源码 1479期】
  5. 【图像边缘检测】基于matlab GUI Sobel+Prewitt+Canny算子图像边缘检测(带面板)【含Matlab源码 1045期】
  6. 【路径规划】基于matlab模拟退火优化遗传算法求解避障路径规划问题【含Matlab源码 889期】
  7. 【数字信号处理】基于matlab GUI数字调音台【含Matlab源码 881期】
  8. 【心音信号】基于matlab GUI心音诊断系统【含Matlab源码 762期】
  9. 【基础教程】基于matlab图像增强+复原+分割【含Matlab源码 056期】
  10. 动态时间规整算法_如何使用动态时间规整算法进行语音识别