Java基础枚举(enum关键字)
目录:
- 前言
- 一.枚举的简介
- 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关键字)相关推荐
- Java基础——枚举类的使用教程
目录 枚举类的理解 自定义枚举类 代码实现: Enum关键字 使用enum定义枚举类 代码实现: Enum类中常用方法 枚举类的理解 枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允 ...
- Java基础——枚举 (详解)
什么是枚举 Java中的枚举是一种类型,顾名思义:就是一个一个列举出来.所以它一般都是表示一个有限的集合类型,它是一种类型,在维基百科中给出的定义是: 在数学和计算机科学理论中,一个集的枚举是列出某些 ...
- java中枚举enum
JDK1.5引入了枚举类型.枚举类型的定义包括枚举声明和枚举体.枚举体就是放置一些常量. 定义枚举要使用enum关键字.对于性别.季节.星期几等内容,如果定义为字符串类型,是很难限制其取值的.采用枚举 ...
- Java基础之static关键字的用法
Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例. 静态(static)可以是: 变 ...
- 【Java基础】final关键字总结
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...
- JavaSE 18 Java基础语法 → 标识符关键字
4.2 标识符和关键字 4.2.1 标识符 标识符是 $.下划线和字母开头,然后又由下划线.字母.数字组成,不能有特殊符号,也不能是关键字!标识符 对大小写是 非常敏感的.(当然可以 使用 中文 命名 ...
- java基础——枚举
2019独角兽企业重金招聘Python工程师标准>>> 枚举就是一组具名的值的有限集合,可以作为常规组件使用. 1.枚举关键字为enum,声明枚举的类自动继承java.lang.En ...
- java基础-枚举和注解
枚举类的使用 如何自定义枚举类 如何使用关键字enum定义枚举类 Enum类的主要方法 实现接口的枚举类 类的对象只有有限个,确定的.举例如下: 星期:Monday(星期一)........Sunda ...
- Java基础之this关键字的作用
this关键字主要存在三种应用 1.this调用本类中的属性,也就是说调用类中的成员变量: 2.this调用本类中的其他方法: 3.this调用本类中的其他构造方法,调用时要放在构造方法的首行,否则会 ...
- java关键字整理_【java基础知识整理】java基础语法之关键字
一.continue与break continue与break基本都使用与循环中,但是continue指结束所有循环的当前循环,而break是指结束整个循环.下面用代码进行简单实例. 使用contin ...
最新文章
- class 与 原型链 解析
- 【HDU - 5627】Clarke and MST(最大生成树,与运算性质,最小生成树MST变形)
- 2021计算机一级模拟29套,“智慧家”2021年第二十九期每周家庭套餐
- jdbc连接oracle_Oracle数据库性能监控|使用SiteScope 监控Oracle
- 词类与句子成分对应关系 —— 状语篇
- 24V转12V10A带使能脚同步整流AH2305D
- Summer Project
- 超级好用的cmd工具软件:Cmder
- 中国法定节假日天数以及世界各国放假天数
- ROS2—服务(Service)
- linux ntp时间同步失败,SUSE linux ntp时间不同步问题
- 小程序接入h5页面_小程序与H5如何互相跳转
- Packet Tracer(第二期)--4RIP
- Layui table表格操作列,按钮过多时展开点击失效问题解决方法
- Java中map的含义
- mysql密码参数_MySQL 密码参数配置与修改 validate_password
- android平板吃鸡开什么画质,ipad2018玩吃鸡可以开什么画质 | 手游网游页游攻略大全...
- 使用C# 开发报价系统
- JAVA多线程:守护线程 setDaemon全方位剖析| 守护线程是线程吗 |thread.isAlive()反思(五)
- 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 8月9日
热门文章
- 传承开源-耿航2018中国开源云超级人物获奖感言
- Apache基金会获得Pineapple基金88.34比特币捐赠
- 毕设题目:Matlab数字信号去噪
- 【TSP】基于matlab改进的人工鱼群算法求解旅行商问题【含Matlab源码 1479期】
- 【图像边缘检测】基于matlab GUI Sobel+Prewitt+Canny算子图像边缘检测(带面板)【含Matlab源码 1045期】
- 【路径规划】基于matlab模拟退火优化遗传算法求解避障路径规划问题【含Matlab源码 889期】
- 【数字信号处理】基于matlab GUI数字调音台【含Matlab源码 881期】
- 【心音信号】基于matlab GUI心音诊断系统【含Matlab源码 762期】
- 【基础教程】基于matlab图像增强+复原+分割【含Matlab源码 056期】
- 动态时间规整算法_如何使用动态时间规整算法进行语音识别