第十一章 枚举和注解

news/2024/11/8 18:46:37/

一、枚举

1. 介绍

(1)枚举:(enumeration,简写enum)

(2)枚举是一组常量的集合

(3)枚举属于一种特殊的类,里面只包含一组有限的特定的对象

2. 枚举的两种实现方式

(1)自定义类实现枚举

(2)使用 enum 关键字实现枚举

3. 自定义类实现枚举

(1)不需要提供setXxx方法,因为枚举对象值通常为只读
(2)对枚举对象/属性使用 final + static 共同修饰,实现底层优化
(3)枚举对象名通常使用全部大写,常量的命名规范
(4)枚举对象根据需要,也可以有多个属性

public class Season {String name;String desc;// 1.私有化构造器private Season(String name, String desc) {this.name = name;this.desc = desc;}// 3. 直接创建固定对象public final static Season SPRING = new Season("春天","温暖");public final static Season SUMMER = new Season("夏天","炎热");
}

4. 使用 enum 关键字实现枚举

(1)使用 enum 关键字开发一个​枚举类​时,默认会继承Enum类

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

(3)枚举对象必须放在枚举类的行首

public enum Season {SPRING("春天","温暖"),SUMMER("夏天","炎热"),WHAT;// 使用无参构造器创建枚举对象,则实参列表和小括号都可以省略String name;String desc;private Season() {}private Season(String name, String desc) {this.name = name;this.desc = desc;}}

5. enum 常用方法

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

(1)toString:Enum类已经重写过了,返回的是当前对象名。子类可以重写该方法,用于返回对象的属性信息。

(2)name:返回当前对象名(常量名),子类中不能重写
(3)ordinal:返回当前对象的位置号,默认从0开始

(4)values:返回当前枚举类中所有的常量

(5)valueof:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!

(6)compareTo:比较两个枚举常量,比较的就是位置号!

public static void main(String[] args) {Season spring = Season.SPRING;System.out.println(spring.toString());System.out.println(spring.name());System.out.println(spring.ordinal());Season[] values = Season.values();Season summer = Season.valueOf("SUMMER");// spring编号 - summer编号int i = spring.compareTo(summer);
}

二、注解

1. 注解的介绍

(1)注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。

(2)和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。

(3)在 JavaSE 中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE 中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替javaEE旧版中所遗留的繁冗代码和 XML配置 等。

2. 基本的 Annotation 介绍

使用 Annotation 时要在其前面增加 符号,并把该 Annotation 当成一个修饰符使用。用于修饰它支持的程序元素。

三个基本的Annotation:
(1)@override:限定某个方法,是重写父类方法,该注解只能用于方法。
(2)@Deprecated:用于表示某个程序元素(类,方法等)已过时。
(3)@SuppressWarnings:抑制编译器警告。

补充说明:@interface的说明
@interface 不是interface(接口),是注解类,是 jdk1.5 之后加入的。

3. 元注解(注解的注解)

3.1 元注解的种类

(1)Retention(保留):指定注解的作用范围,三种SOURCE、CLASS、RUNTIME

(2)Target(目标):指定注解可以在哪些地方使用

(3)Documented:指定该注解是否会在javadoc 体现

(4)Inherited(继承):子类会继承父类注解

3.2 @Retention 注解

只能用于修饰一个注解定义,用于指定该注解可以保留多长时间,@Rentention 包含一个 RetentionPolicy 类型的成员变量,使用 @Rentention 时必须为该 value 成员变量 指定值。

@Retention的三种值
(1)RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注解
(2)RetentionPolicy.CLASS:编译器将把注解记录在 class文件 中,当运行 Java 程序时,JVM不会保留注解。这是默认值
(3)RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中。当运行 Java 程序时,JVM 会保留注解。程序可以通过反射获取该注解。

3.3 @Target 注解

用于修饰注解定义,用于指定被修饰的注解能用于修饰哪些程序元素。@Target 也包含一个名为 value 的成员变量。

3.4 @Documented 注解

@Documented:用于指定被该元注解修饰的注解类将被 javadoc 工具提取成文档,即在生成文档时,可以看到该注解。
说明:定义为 Documented 的注解必须设置 Retention 值为 RUNTIME。

3.4 @Inherited 注解(使用较少)

被它修饰的注解将具有继承性。如果某个类使用了被@lnherited修饰的注解,则其子类将自动具有该注解。


http://www.ppmy.cn/news/83222.html

相关文章

前端三剑客

一.前端是什么: 前端主要是考虑怎样能让用户觉得用起来更舒服,考虑界面布局、交互效果、页面加载速度等等,主要是偏向用户看得见的部分,客户端(pc、手机、pad)上浏览web。网站的“前端”是与用户直接交互的…

ES5 构造函数与ES6 Class的区别

Class 类中不存在变量提升 // es5var bar new Bar(); // 可行function Bar() {this.bar 42;}//es6const foo new Foo(); // Uncaught ReferenceErrorclass Foo {constructor() {this.foo 42;}} class内部会启用严格模式 // es5function Bar() {// 引用一个未声明的变量baz…

o3de 安装

工具依赖: Microsoft Visual Studio 2019 version 16.11.x. 或 Microsoft Visual Studio 2022 version 17.3.x.CMake 3.22.0 or later,建议3.26安装git安装 Git LFS,否则资源无法更新 下载源码: 建立根目录:o3de_dev/…

一次培训带来的思考

“有没有可能做的更好点”, 这是我从我的TL学到的最受益的一句。 背景 故事要从一次培训开始。话说要给部门做一次安全的培训,提升部门里所有人的安全意识。起初的设计是有讲解还有实操,所以最好在线下举行,人数限制而且时间较长…

【SpringBoot】k8s部署使用actuator做健康检查

环境介绍 开发依赖版本Spring Boot3.0.6JDK20 主要的pom依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId> </dependency> <dependency><groupId>org.springframework…

Redis-数据结构

前言 ​ 了解Redis&#xff0c;都大概知道Redis有5种基本数据类型&#xff1a;字符串(string)、列表(list)、哈希(hash)、集合(set)、有序集合(zset)、5.0中Stream数据类型。但是这些数据类型的底层都是按照对象结构与对应的编码组合而成。这也就是说有的底层数据结构可以是多…

代码随想录补打卡 121买卖股票的最佳时机 122 买卖股票的最佳时机 二123买卖股票的最佳时机 三

代码如下 func maxProfit(prices []int) int { //建立一个二维数组 dp[i][0]表示持有股票的最大金钱 dp[i][1] 表示不持有股票的最大金钱 dp : make([][]int,len(prices)) for i,_ : range dp { dp[i] make([]int,2) } dp[0][0] -prices[0] // 第0天持有股票&#xff0c;…

熟练掌握这5招,让Pandas DataFrame列随你调整

熟练运用Pandas进行数据处理和分析的你&#xff0c;是否遇到过DataFrame列顺序排列不顺的情况? 今天教你5种灵活方法&#xff0c;轻松调整Pandas DataFrame的列顺序&#xff0c;让数据处理更得心应手。 1. 使用loc索引器 可以传入一个列序列表给loc索引器来重新排列列顺序。例…