第11-15章

news2024/11/17 10:38:54

第11章 枚举和注解

11.1举例

要求创建季节(Season) 对象,请设计并完成。
但是,季节的值是有限的几个值(4个季节),不可以再多。
就可以用枚举来解决
枚举(enumeration,简写enum),是一组常量的集合。(属于一种特殊的类,里面只包含一组有限的特定的对象)。

11.2枚举的二种实现方式

  1. 自定义类实现枚举
  2. 使用 enum 关键字实现枚举

自定义类实现枚举-应用案例:
在这里插入图片描述

package com.hspedu.enum_;
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 + '\'' +
		'}';
	}
}

自定义类实现枚举-小结:
进行自定义类实现枚举,有如下特点:

  1. 构造器私有化
  2. 本类内部创建一组对象[四个 春夏秋冬]
  3. 对外暴露对象(通过为对象添加 public final static 修饰符)
  4. 可以提供 get 方法,但是不要提供 set

enum 关键字实现枚举-快速入门

package com.hspedu.enum_;
public class Enumeration03 {
public static void main(String[] args) {
	System.out.println(Season2.AUTUMN);
	System.out.println(Season2.SUMMER);
}
}
//演示使用 enum 关键字来实现枚举类
enum Season2 {//类
//如果使用了 enum 来实现枚举类
//1. 使用关键字 enum 替代 class
//2. public static final Season SPRING = new Season("春天", "温暖") 直接使用
// SPRING("春天", "温暖") 解读 常量名(实参列表)
//3. 如果有多个常量(对象), 使用 ,号间隔即可
//4. 如果使用 enum 来实现枚举,要求将定义常量对象,写在前面
//5. 如果我们使用的是无参构造器,创建常量对象,则可以省略 ()
	SPRING("春天", "温暖"), WINTER("冬天", "寒冷"), AUTUMN("秋天", "凉爽"), SUMMER("夏天", "炎热")/*, What()*/;
	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 + '\'' +
		'}';
	}
}

enum 关键字实现枚举注意事项

  1. 当我们使用 enum 关键字开发一个枚举类时,默认会继承 Enum 类, 而且是一个 final 类
  2. 传统的 public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成 SPRING(“春天”, “温暖”), 这里必须知道,它调用的是哪个构造器.
  3. 如果使用无参构造器 创建 枚举对象,则实参列表和小括号都可以省略
  4. 当有多个枚举对象时,使用,间隔,最后有一个分号结尾
  5. 枚举对象必须放在枚举类的行首
    在这里插入图片描述
    javac编译,javap反编译
    在这里插入图片描述![-](https://img-blog.csdnimg.cn/38ce827258814205b3a382e41e613fbc.png)

enum 常 2 用方法说明:
使用关键字 enum 时,会隐式继承 Enum 类, 这样我们就可以使用 Enum 类相关的方法。[看下源码定义.]
public abstract class Enum<E extends Enum>
implements Comparable, Serializable {
}
在这里插入图片描述

  1. toString:Enum 类已经重写过了,返回的是当前对象
    名,子类可以重写该方法,用于返回对象的属性信息
  2. name:返回当前对象名(常量名),子类中不能重写
  3. ordinal:返回当前对象的位置号,默认从 0 开始
  4. values:返回当前枚举类中所有的常量
  5. valueOf:将字符串转换成枚举对象,要求字符串必须
    为已有的常量名,否则报异常!
  6. compareTo:比较两个枚举常量,比较的就是编号!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【自学Python】Python字符串对齐教程

Python字符串左对齐 大纲 Python字符串左对齐教程 Python 字符串的左对齐&#xff0c;即在我们需要设定 字符串 为固定的长度时&#xff0c;如果字符串的长度不够&#xff0c;则我们可以指定使用特定的字符在字符串的右边进行填充&#xff0c;从而达到左对齐的目的。 在 Pyt…

请求域名requests.(url = 地址)报错

报错&#xff1a;raise MissingSchema(requests.exceptions.MissingSchema: Invalid URL titles: No scheme supplied. Perhaps you meant http://titles?报错分析&#xff1a;response requests.get(urlurl,headersheaders) # print(response) response.encoding"utf-…

Docker逃逸二三事

Docker逃逸在渗透测试中面向的场景大概是这样&#xff0c;渗透拿到shell后&#xff0c;发现主机是docker环境&#xff0c;要进一步渗透&#xff0c;就必须逃逸到“直接宿主机”。甚至还有物理机运行虚拟机&#xff0c;虚拟机运行Docker容器的情况。那就还要虚拟机逃逸了。所以本…

【LeetCode】2325. 解密消息

给你字符串 key 和 message &#xff0c;分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下&#xff1a; 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。将替换表与普通英文字母表对齐&#xff0c;形成对照表。按照对照表 替换 messag…

C语言课设作业《通讯录》全程记录 ps:动态版本

写在前面&#xff1a; 通讯录算是前面对学过知识的一个综合运用&#xff0c;涉及到的知识点有 &#xff1a;枚举类型&#xff0c;结构体、结构体指针、动态内存分配(malloc,calloc,realloc,free)、typedef关键字、多文件编程等以上内容&#xff0c;设计思想不是太难&#xff0c…

Java多线程环境下使用的集合类

Java标准库中大部分集合类都是线程不安全的, 多线程环境下使用同一个集合类对象, 很可能会出问题; 只有少部分是线程安全的, 比如: Vector, Stack, HashTable这些, 关键方法都会带有synchronized, 但一般是不推荐使用这几个类的. 一. 多线程环境下使用ArrayList ArrayList在多…

浅析设计模式4——模板方法模式

我们在进行软件开发时要想实现可维护、可扩展&#xff0c;就需要尽量复用代码&#xff0c;并且降低代码的耦合度。设计模式就是一种可以提高代码可复用性、可维护性、可扩展性以及可读性的解决方案。大家熟知的23种设计模式&#xff0c;可以分为创建型模式、结构型模式和行为型…

OAuth2简介

目录一、 什么是OAuth2二、OAuth2中的角色三、认证流程四、生活中的Oauth2思维五、令牌的特点六、OAuth2授权方式1、授权码2、隐藏方式3、密码方式4、凭证方式一、 什么是OAuth2 OAuth2.0是目前使用非常广泛的授权机制&#xff0c;用于授权第三方应用获取用户的数据。 举例说明…

使用Vuex的个人理解

一、逻辑原理 要使用 Vuex 进行集中管理数据&#xff08;状态&#xff09;&#xff0c;按照 Vuex 分模块的设 计思想&#xff0c;先在 src 下创建 store 文件夹&#xff0c;然后创建一个根级别的 index.js&#xff0c;作为组装模块并导出 store 地方&#xff08;store 对象是 …

xss.haozi.me通关教程

10.xss.haozi.me通关教程 0x00 首先整体浏览网站 分别是xss注入点&#xff0c;注入后的HTML代码以及网页源码 构造常规payload&#xff1a; <script>alert(1)</script> 成功通关 0x01 看到注入点是在标签中, 所以用上一题的方法是不会被解析的, 故需要去构造…

MySQL_索引

索引概述 简介 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff…

OKR之剑·实战篇04:OKR执行过程优化的那些关键事

作者&#xff1a;vivo 互联网平台产品研发团队 本文是《OKR 之剑》系列之实战第 4 篇——OKR执行过程不是一成不变的&#xff0c;团队和个人在执行中不断优化执行的具体行动&#xff0c;保障OKR的高效执行。 前言 “言治骨角者&#xff0c;既切之而复磋之&#xff1b;治玉石者…

vue axios post 请求415、400、500、404报错时

vue axios post 请求415 415错误的解释&#xff0c;服务器无法处理请求附带的媒体格式。 解决方式&#xff1a; 后端参数使用了RequestBody注解进行绑定&#xff0c;用了这个注解进行数据绑定&#xff0c;只能接受数据类型为 Content-Type类型为application/json 1.后台修改&am…

notepad++ 中安装NppExec插件

一、何为NppExec简单的说&#xff0c;这个插件可以让用户在NPP中直接运行一些命令和程序&#xff0c;而不用启动这些命令和程序对应的实际工具或编译器。1. NppExec是...NppExec是介于Notepad和外部工具/编译器之间的一个中间件。它允许用户在NPP中直接运行这些工具/编译器。Np…

智能管理PoE交换机

随着网络化信息化的快速发展&#xff0c;以太网供电&#xff08;PoE&#xff09;的优势逐渐被大家所熟知。只需要一根网线&#xff0c;PoE在给网络设备供电的同时还能传输数据&#xff0c;免布线&#xff0c;节省成本和空间&#xff0c;设备可随意移动&#xff0c;系统部署灵活…

TCP/IP网络编程——域名及网络地址

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 8 章 域名及网络地址8.1 域名系统8.1.1 什么是域名8.1.2 DNS 服务器8.2 IP地址和域名之间的转换8.2.1 程序中有必要使用域名吗&#xff1f;8.2.2 利用域名获取IP地址第 8 章 域名及网络地址 8.1 域名系统 …

重建大师可以实现识别地表树木吗?对数据格式有什么要求?

目前重建大师5.0具备自动单体化与切割单体化功能&#xff0c;在三维重建的过程中就可自动识别地表树木、建筑。 数据格式的话&#xff0c;目前是需要重建大师生产的倾斜模型数据&#xff0c;其他软件生产的模型暂不支持。重建大师目前并不是直接对模型数据进行深度学习识别&am…

Node.js包和模块的区别在哪儿

在Node.js 中&#xff0c;会将某个独立的功能封装起来&#xff0c;用于发布、更新、依赖管理和进行版本控制。Nodejs 根据CommonJS规范实现了包机制&#xff0c;开发了NPM包管理工具&#xff0c;用来解决包的发布和获取需求。 Node.js的包和模块并没有本质的不同&#xff0c;包…

详解linux中网络的几种模式:NAT,网桥,以及静态IP的配置和主机名

NAT模式 NAT就是网络地址转换&#xff0c;虚拟机和主机构建一个专有网络&#xff0c;通过NAT进行设备IP的转换&#xff0c;虚拟机通过共享主机的IP访问外界网络&#xff0c;但外部网络无法访问虚拟机。构建出的子网一般是WNET8. 网桥模式 也叫桥接模式&#xff0c;虚拟机直接…

Android发送广播时报错:Sending non-protected broadcast xxxxxxx from system xxxxxxxxxx

带android:sharedUserId“android.uid.system” 发送广播时&#xff0c;会出现 Sending non-protected broadcast 异常提醒&#xff1b; 原因&#xff1a; Ams在发送广播时&#xff0c;对于systemApp(系统应用)&#xff0c;会要求发送广播必须是声明在frameworks\base\core\re…