第八章:枚举

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、枚举
  • 总结


前言

类可以作为常量使用。


一、枚举

枚举是一组常量的集合。可以这里理解: 枚举属于一种特殊的类, 里面只包含一组有限的特定的对象。

枚举的实现方式
自定义类实现枚举
使用 enum 关键字实现枚举
枚举使用细则
不需要提供setXxx方法,因为枚举对象值通常为只读
对枚举对象/属性使用final + static 共同修饰,实现底层优化
枚举对象通常使用全部大写,常量的命名规范
枚举对象根须需要也可以有多个属性
自定义类实现枚举
1.构造器私有化
2.本类内部创建一组对象[四个 春夏秋冬]
3.对外暴露对象(通过为对象添加 public final static 修饰符)
4.可以提供 get 方法, 但是不要提供 set
public class Enumeration02 {
	public static void main(String[] args) {
		System.out.println(Season.AUTUMN);
		System.out.println(Season.SPRING);
	}
} 
//演示字定义枚举实现
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 AUTUMN = new Season("秋天", "凉爽");
	public static final Season SUMMER = new Season("夏天", "炎热");

	//1. 将构造器私有化,目的防止 直接 new
	//2. 去掉 setXxx 方法, 防止属性被修改
	//3. 在 Season 内部, 直接创建固定的对象
	//4. 优化, 可以加入 final 修饰符
	private Season(String name, String desc) {
		this.name = name;
		this.desc = desc;
	}
	
	public String getName() {
		return name;
	} 
	
	public String getDesc() {
		return desc;
	} 
	
	@Override
	public String toString() {
		return "Season{" +
		"name='" + name + '\'' +
		", desc='" + desc + '\'' +
		'}';
	}
	
}
enum 关键字实现枚举使用细则
1) 当我们使用 enum 关键字开发一个枚举类时, 默认会继承 Enum 类, 而且是一个 final 类[如何证明],老师使用 javap 工具来演示
2) 传统的 public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成 SPRING(“春天”, “温暖”), 这里必须知道, 它调用的是哪个构造器.
3) 如果使用无参构造器 创建 枚举对象, 则实参列表和小括号都可以省略
4) 当有多个枚举对象时, 使用逗号间隔, 最后有一个分号结尾
5) 枚举对象必须放在枚举类的行首.
public class Enumeration03 {
	public static void main(String[] args) {
		System.out.println(Season2.AUTUMN);
		System.out.println(Season2.SUMMER);
	}
} 

//演示使用 enum 关键字来实现枚举类
enum Season2 {//类
	//定义了四个对象, 固定.
	// public static final Season SPRING = new Season("春天", "温暖");
	// public static final Season WINTER = new Season("冬天", "寒冷");
	// public static final Season AUTUMN = new Season("秋天", "凉爽");
	// public static final Season SUMMER = new Season("夏天", "炎热");
	//如果使用了 enum 来实现枚举类
	//1. 使用关键字 enum 替代 class
	//2. public static final Season SPRING = new Season("春天", "温暖") 直接使用
	// SPRING("春天", "温暖") 解读 常量名(实参列表)
	//3. 如果有多个常量(对象), 使用 ,号间隔即可
	//4. 如果使用 enum 来实现枚举, 要求将定义常量对象, 写在前面
	//5. 如果我们使用的是无参构造器, 创建常量对象, 则可以省略 ()
	SPRING("春天", "温暖"), WINTER("冬天", "寒冷"), AUTUMN("秋天", "凉爽"),
	SUMMER("夏天", "炎热"),//调用有参构造器
	WAHT()/WAHT;//调用无参构造器
	private String name;
	private String desc;//描述
	
	private Season2()//无参构造器
	{
	
	} 
	
	private Season2(String name, String desc) {
		this.name = name;
		this.desc = desc;
	}
	
	public String getName() {
		return name;
	} 
	
	public String getDesc() {
		return desc;
	} 
	
	@Override
	public String toString() {
		return "Season{" +
		"name='" + name + '\'' +
		", desc='" + desc + '\'' +
		'}';
	}
	
}


java编译与反编译
源文件编译成字节码文件:javac
字节码文件反编译成源文件:javap

在这里插入图片描述

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

public abstract class Enum<E extends Enum<E>>
	implements Comparable<E>, Serializable {
}
enum常用方法作用
toStringEnum类已经重写过了返回的是当前对象名,子类可以重写该方法, 用于返回对象的属性信息
name返回当前对象名(常量名) , 子类中不能重写
ordinal返回当前对象的位置号, 默认从 0 开始
values返回当前枚举类中所有的常量
valueOf将字符串转换成枚举对象, 要求字符串必须为已有的常量名, 否则报异常
compareTo比较两个枚举常量, 比较的就是编号,编号相减

public class EnumMethod {
	public static void main(String[] args) {
	
		//使用 Season2 枚举类, 来演示各种方法
		Season2 autumn = Season2.AUTUMN;
		
		//输出枚举对象的名字
		System.out.println(autumn.name());
		
		//ordinal() 输出的是该枚举对象的次序/编号, 从 0 开始编号
		//AUTUMN 枚举对象是第三个, 因此输出 2
		System.out.println(autumn.ordinal());
		
		//从反编译可以看出 values 方法, 返回 Season2[]
		//含有定义的所有枚举对象
		Season2[] values = Season2.values();
		System.out.println("===遍历取出枚举对象(增强 for)====");
		for (Season2 season: values) {//增强 for 循环
			System.out.println(season);
		} 
		
		//valueOf:将字符串转换成枚举对象, 要求字符串必须为已有的常量名, 否则报异常
		//执行流程
		//1. 根据你输入的 "AUTUMN" 到 Season2 的枚举对象去查找
		//2. 如果找到了, 就返回, 如果没有找到, 就报错
		Season2 autumn1 = Season2.valueOf("AUTUMN");
		System.out.println("autumn1=" + autumn1);
		System.out.println(autumn == autumn1);
		
		//compareTo: 比较两个枚举常量, 比较的就是编号
		//老韩解读
		//1. 就是把 Season2.AUTUMN 枚举对象的编号 和 Season2.SUMMER 枚举对象的编号比较
		//2. 看看结果
		/*
		public final int compareTo(E o) {
			return self.ordinal - other.ordinal;
		} 
		Season2.AUTUMN 的编号[2] - Season2.SUMMER 的编号[3]
		*/
		
		System.out.println(Season2.AUTUMN.compareTo(Season2.SUMMER));


		
		//普通的 for 循环
		// System.out.println("=====普通的 for=====");
		// for (int i = 0; i < nums.length; i++) {
		// 		System.out.println(nums[i]);
		// }
		//增强的 for 循环
		
		// System.out.println("=====增强的 for=====");
		// //执行流程是 依次从 nums 数组中取出数据, 赋给 i, 如果取出完毕, 则退出 for
		// for(int i : nums) {
		// 		System.out.println("i=" + i);
		// }
		
	}
}
enum实现接口
使用 enum 关键字后, 就不能再继承其它类了, 因为 enum 会隐式继承 Enum, 而 Java 是单继承机制
枚举类和普通类一样, 可以实现接口

enum 类名 implements 接口 1, 接口 2{}

public class EnumDetail {

	public static void main(String[] args) {
		Music.CLASSICMUSIC.playing();
	}
} 
class A 
{
	
} 
//1.使用 enum 关键字后, 就不能再继承其它类了, 因为 enum 会隐式继承 Enum, 而 Java 是单继承机制
//enum Season3 extends A {
//
//}
//2.enum 实现的枚举类, 仍然是一个类, 所以还是可以实现接口的.

interface IPlaying {
	public void playing();
} 

enum Music implements IPlaying {
	CLASSICMUSIC;
	
	@Override
	public void playing() {
		System.out.println("播放好听的音乐...");
	}
}

总结

枚举对象就是类作为常量的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/148495.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springBoot 入门一 :创建springBoot项目

创建springBoot项目 配置maven 项目报错处理

水库大坝安全监测预警系统的重要作用

水库大坝建造在地质构造复杂、岩土特性不均匀的地基上&#xff0c;在各种荷载的作用和自然因素的影响下&#xff0c;其工作性态和安全状况随时都在变化。如果出现异常&#xff0c;又不被及时发现&#xff0c;其后果不堪设想。全天候实时监测&#xff0c;实时掌握水库水位、雨情…

python链表_递归求和_递归求最大小值

创建一个单链表&#xff1a; class LinkNode: #设置属性def __init__(self,data None):self.data dataself.next None class LinkList: #设置头结点def __init__(self):self.head LinkNode()self.head.next Nonedef CreateListR(self,a): …

概率论和数理统计(四)方差分析与回归分析

前言 实际场景中,也需要研究两个变量的关系.检验也可能出现两个以上的总体. 方差分析 假设检验中&#xff0c;若需检验 H 0 : μ 1 μ 2 &#xff0c; H 1 : μ 1 ̸ μ 2 H_0:μ_1μ_2&#xff0c;H_1:μ_1 \notμ_2 H0​:μ1​μ2​&#xff0c;H1​:μ1​μ2​&#x…

【问题思考总结】第一型曲线积分和第二型曲线积分的区别与联系【从几何知识的角度思考】

此处为曲面积分------>第一型曲面积分的第二型曲面积分的区别与联系【从几何知识的角度思考】 问题 在做题的时候&#xff0c;我发现&#xff0c;关于这方面的知识有很多很多&#xff0c;但是每道题的解法不尽相似&#xff0c;也没有什么具体的体系&#xff0c;尤其是在结…

香港:考虑将虚拟资产列为投资移民资产

11 月 13日消息&#xff0c;香港政府在重新启动投资移民计划后&#xff0c;正考虑将持牌虚拟资产交易平台的比特币等虚拟资产列为可接受的投资项目。这一措施旨在折大投资移民的资产范围&#xff0c;以吸引更多高净值人士在香港落户。尽管有声音呼吁将房地产投资纳入资格范围&a…

LMI相机配置步骤,使用Gocator2550相机

在此之前可以先浏览我编写的相机SDK通用类和LMISDK&#xff0c;进行配套观看 https://blog.csdn.net/m0_51559565/article/details/134404394 //LMI相机SDK https://blog.csdn.net/m0_51559565/article/details/134403745 //相机通用类1.启动LMI加速器 LMI加速器用于将相机…

微信公众号会员系统怎么做

一、引言 在这个信息爆炸的时代&#xff0c;微信公众号已经成为了企业和个人品牌的重要宣传阵地。而在公众号运营过程中&#xff0c;会员系统是非常重要的一环。通过建立会员系统&#xff0c;你可以更好地管理粉丝、提升用户黏性&#xff0c;让你的品牌更加强大。本文将为你详…

光纤接入网是怎么操作

大家还记得我们通过运营商提供的网线甚至是电话线上网的经历吧&#xff0c;那时上网使用xDSL&#xff08;数字用户线路&#xff0c;Digital Subscriber Line&#xff09;网络技术&#xff0c;xDSL技术是数字用户线路的所有类型的总称&#xff0c;包括RADSL、SDSL、HDSL、ADSL、…

太好玩了,爬虫、部署API、加小程序,一条龙玩转知乎热榜

一直想做一个从爬虫到数据处理&#xff0c;到API部署&#xff0c;再到小程序展示的一条龙项目&#xff0c;最近抽了些时间&#xff0c;实现了一个关于知乎热榜的&#xff0c;今天就来分享一下&#xff01; 由于代码还没有完全整理好&#xff0c;今天只给出一个大致的思路和部分…

uniapp生成自定义(分享)图片并保存到相册

需求描述 在一个页面中底部有个保存图片的功能&#xff0c;点击能够保存一张生成的自定义表格图片。 第一眼见到这个需求 自己会出现了两个问题 如何去处理图片中的自定义内容以及样式如何将自定义内容转化成图片 至于保存图片&#xff0c;uniapp有对应的api去实现uni.saveIma…

【广州华锐互动】AR技术为气象站远程监控及在线指导维修提供极大便利

随着科技的不断发展&#xff0c;人类对于自然环境的理解和掌控能力也在不断提升。其中&#xff0c;AR&#xff08;增强现实&#xff09;技术的应用&#xff0c;为气象监控带来了革命性的变化。AR远程气象监测&#xff0c;就是将AR技术与气象监控相结合&#xff0c;通过虚拟与现…

Centos7 单用户模式修改密码 3步搞定 666 (百分比成功)

1.第一步重新服务器 2.进入这个页面按e进入单用户模式 3.找到linux16这行 在后面添加 init/bin/bash 按ctrlx进入 4.注意是事项直接修改是报错passud: Authentication token manipulation error 需要执行权限&#xff1a;mount -o remount,rw /

Scala---数据基础

一、数据类型 二、变量和常量的声明 定义变量或者常量的时候&#xff0c;也可以写上返回的类型&#xff0c;一般省略&#xff0c;如&#xff1a;val a:Int 10常量不可再赋值 1./** 2. * 定义变量和常量 3. * 变量 :用 var 定义 &#xff0c;可修改 4. * 常量 :用 val 定…

最快最便捷的pytest使用allure测试报告

一、前言 最近通过群友了解到了allure这个报告&#xff0c;开始还不以为然&#xff0c;但还是逃不过真香定律。 经过试用之后&#xff0c;发现这个报告真的很好&#xff0c;很适合自动化测试结果的展示。下面说说我的探索历程吧。 选用的项目为Selenium自动化测试Pytest框架实…

IP地址查询在社交行业中的崭新应用

在社交媒体蓬勃发展的今天&#xff0c;IP地址查询技术IP66_ip归属地在线查询_免费ip查询_ip精准定位平台正在成为社交行业中的一项强大工具。这项技术不仅为社交平台提供了更多个性化服务的可能&#xff0c;还在用户安全和内容管理等方面发挥了关键作用。本文将深入探讨IP地址查…

代码随想录算法训练营第21天|530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

JAVA代码编写 530.二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1a;1…

使用Halcon的HsmartWindows窗体控件显示3D模型

在此之前可以先浏览我的LMI&#xff08;3D&#xff09;SDK配合学习 https://blog.csdn.net/m0_51559565/article/details/134419165 //配置LMI相机 https://blog.csdn.net/m0_51559565/article/details/134404394 //LMI相机SDK https://www.51halcon.com/forum.php?modviewthr…

steam搬砖核心原理是什么?为什么会有差价产生?

CSGO游戏搬砖到底怎么赚钱的&#xff0c;赚钱原理讲解 这涉及到一个关于汇率差异的知识点。众所周知&#xff0c;目前1美元7.2元&#xff0c;但实际上我们在steam账户里拿到1美元&#xff0c;实际上只需要5.4元左右&#xff0c;也就是说&#xff0c;如果这款产品是steam和网易两…

如何使用iPhone15在办公室观看家里电脑上的4k电影?

如何使用iPhone15在办公室观看家里电脑上的4k电影&#xff1f; 文章目录 如何使用iPhone15在办公室观看家里电脑上的4k电影&#xff1f;1.使用环境要求&#xff1a;2.下载群晖videostation&#xff1a;3.公网访问本地群晖videostation中的电影&#xff1a;4.公网条件下使用电脑…