【Java注解的作用是什么?】

news2024/9/22 20:35:41

在这里插入图片描述

🍁Java注解的作用是什么?

  • 🍁典型解析
  • 🍁扩展知识仓
    • 🍁什么是元注解
      • 🍁@Retention
      • 🍁@Target
      • 🍁@Documented
      • 🍁@Inherited


🍁典型解析


Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到Java 的。


Java的注解,可以说是一种标识,标识一个类或者一个字段,常常是和反射,AOP结合起来使用。中间件一般会定义注解,如果某些类或字段符合条件,就执行某些能力。


🍁扩展知识仓


🍁什么是元注解


说简单点,就是 定义其他注解的注解。


Java的元注解是用于注解其他注解的注解。它们用于描述注解本身的一些属性,例如它们的元数据。


Java标准库提供了四个元注解:

@Retention (表示在什么级别保存该注解信息) , @Target(表示该注解可以用于什么地方) , @Documented (将此注解包合在iavadoc中) , 和 @Inherited (允许子类继承父类中的注解) 。

一般@Target是被用的最多的


🍁@Retention


  • 描述了注解的生命周期。
  • 有三个可能的值:SOURCE、CLASS、和 RUNTIME。

指定被修饰的注解的生命周期,即注解在源代码、编译时还是运行时保留。它有三个可选的枚举值: SOURCECLASS和RUNTIME。默认为CLASS。


import java.lang.annotation.Retention ; 
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)

public @interface MyRuntimeAnnotation {
		//some elements and values
}


🍁@Target


  • 描述了注解应用的Java元素类型。
  • 可以用于类、方法、字段等。

指定被修饰的注解可以应用于的元素类型,如类、方法、字段等。这样可以限制注解的使用范围,避免错误使用。


import java.lang.annotation.Target;
import java.lang.annotation.ElementType;

@Target({ElementType.TYPEElementType.METHOD})

public @interface MyTargetAnnotation {
	//some elements and values
} 

🍁@Documented


当一个注解被标记为@Documented,它会被包含在JavaDoc中。

用于指示注解是否会出现在生成的Java文档中。如果一个注解被@Documented元注解修饰,则该注解的信息会出现在API文档中,方便开发者查阅。


import java.lang.annotation.Documented;  


@Documented
public @interface MyDocumentedAnnotation {
	//some elements and values
}

🍁@Inherited


如果一个注解被标记为@Inherited,那么当一个类被标记为该注解时,它的子类也会继承这个注解。


指示被该注解修饰的注解是否可以被继承。默认情况下,注解不会被继承,即子类不会继承父类的注解。但如果将个注解用@Inherited修饰,那人它就可以被了类继承。


import java.lang.annotation .Inherited;


@Inherited
public @interface MyInheritedAnnotation  {
	//some elements and values
}

注意:

比如Override这个注解,就不是一个元注解。而是通过元注解定义出来的。


看一个代码,其中包含了多个自定义注解和元注解的使用:


import java.lang.annotation.*;  

/**
 * @ author 昕宝爸爸
 */
  
// 定义一个元注解,用于标记其他注解为“高级”  
@Target(ElementType.ANNOTATION_TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface Advanced {  
}  
  
// 定义一个元注解,用于标记其他注解为“实验性”  
@Target(ElementType.ANNOTATION_TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface Experimental {  
}  
  
// 定义一个高级且实验性的注解,用于标记类  
@Advanced  
@Experimental  
@Target(ElementType.TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface ComplexAnnotation {  
    String description() default ""; // 描述信息  
    int version() default 1; // 版本号  
}  
  
// 使用ComplexAnnotation注解的类  
@ComplexAnnotation(description = "注解的示例", version = 2)  
public class ComplexClass {  
    // ... class body ...  
}

在这个例子中,我们定义了两个元注解:@Advanced 和 @Experimental。这两个元注解本身没有实际功能,只是用于标记其他注解。然后,我们定义了一个复杂的注解 @ComplexAnnotation,该注解被标记为 @Advanced 和 @Experimental。最后,我们在一个类 ComplexClass 上使用了 @ComplexAnnotation 注解,并为其提供了描述信息和版本号。这个示例展示了如何创建和使用复杂的自定义注解和元注解。

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

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

相关文章

【DataGrip使用小技巧】2

【技巧1】要将活动编辑器与剪贴板内容进行比较,请右键单击编辑器中的任意位置,然后从上下文菜单中选择compare with Clipboard. 如图所示 剪贴板和编辑器的比较一目了然 【技巧2】若要创建表的备份副本,请将表拖到数据库树视图中同一数据源的…

AI项目十九:YOLOV8实现目标追踪

若该文为原创文章,转载请注明原文出处。 主要是学习一下实现目标追踪的原理,并测试一下效果。 目的是通过YOLOV8实现人员检测,并实现人员追踪,没个人员给分配一个ID,实现追踪的效果。 也可以统计人数。在小区办公楼…

Linux:线程优先级设置

目录 一、背景二、调整普通线程的优先级通过系统命令通过Linux C代码 三、调整实时线程的优先级通过系统命令通过Linux C代码 四、参考资料(建议一定要阅读) 在操作系统中,线程优先级决定了线程在 CPU 调度时的重要性。较高优先级的线程会在竞…

Python能做大项目(6)Poetry -- 项目管理的诗和远方之一

[Poetry] 是一个依赖管理和打包工具。Poetry 的作者解释开发 Poetry 的初衷时说: 通过前面的案例,我们已经提出了一些问题。但不止于此。 当您将依赖加入到 requirements.txt 时,没有人帮你确定它是否与既存的依赖能够和平共处,这…

java数据结构与算法刷题-----LeetCode633. 平方数之和

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 思路一:双指针 可以使用双指针,不断从两个方向匹配…

分享71个Java源码总有一个是你想要的

分享71个Java源码总有一个是你想要的 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 链接:https://pan.baidu.com/s/1frK-W3GT8WrydSlQ-E3o6A?pwd6666 提取码:6666 UI代码 def __init__(self):import …

大数据技术学习笔记(十一)—— Flume

目录 1 Flume 概述1.1 Flume 定义1.2 Flume 基础架构 2 Flume 安装3 Flume 入门案例3.1 监控端口数据3.2 实时监控单个追加文件3.3 实时监控目录下多个新文件3.4 实时监控目录下的多个追加文件 4 Flume 进阶4.1 Flume 事务4.2 Flume Agent 内部原理4.3 Flume 拓扑结构4.3.1 简单…

C++之多层 if-else-if 结构优化(三)

C之多层 if-else-if 结构优化(二)-CSDN博客 接上面的内容继续讲解多层 if-else-if结构优化 8、利用规则执行器来进行优化 8.1 业务场景介绍 if (未注册用户){return false; }if (是否国外用户) {return false; }if (刷单用户) {return false; }if (未付费用户 && 不…

数据仓库【2】:架构

数据仓库【2】:架构 1、架构图2、ETL流程2.1、ETL -- Extract-Transform-Load2.1.1、数据抽取(Extraction)2.1.2、数据转换(Transformation)2.1.3、数据加载( Loading ) 2.2、ETL工具2.2.1、结构…

github新建仓库推送代码教学

之前一直用gitee,准备转到github。因为一步一步尝试。如果是新手或许文章会有帮助 点击 new 创建 拉代码 Idea 打开 复制一个 pom 文件作为 maven 管理 提交代码 不出意外的出意外,报错 点击authorize JetBrains 失败 分析问题 本质就是没有…

零基础入门网络安全必看的5本书籍(附PDF)

书中自有黄金屋,书中自有颜如玉。很多人学习一门技术都会看大量的书籍,经常也有朋友询问:零基础刚入门,应该看哪些书?应该怎么学?等等问题。今天就整理了5本零基础入门网络安全必看书籍,希望能帮…

Ubuntu 22.04.3 Server 设置静态IP 通过修改yaml配置文件方法

目录 1.查看网卡信息 2.修改yaml配置文件 3.应用新的网络配置 4.重新启动网络服务 文章内容 本文介绍Ubuntu 22.04.3 Server系统通过修改yaml配置文件配置静态 ip 的方法。 1.查看网卡信息 使用ifconfig命令查看网卡信息获取网卡名称​ 如果出现Command ifconfig not fo…

若依SQL Server开发使用教程

1. sys_menu表中的将菜单ID修改为自动ID,解决不能增加菜单的问题,操作流程如下: 解决方案如下 菜单栏->工具->选项 点击设计器,去掉阻止保存要求更新创建表的更改选项,点确认既可以保存了 2 自动生成代码找不表的解决方案…

智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.指数分布算法4.实验参数设定5.算法结果6.…

20231225使用BLE-AnalyzerPro WCH升级版BLE-PRO蓝牙分析仪抓取BLE广播数据

20231225使用BLE-AnalyzerPro WCH升级版BLE-PRO蓝牙分析仪抓取BLE广播数据 2023/12/25 20:05 结论:硬件蓝牙分析仪 不一定比 手机端的APK的效果好! 亿佰特E104-2G4U04A需要3片【单通道】,电脑端的UI为全英文的。 BLE-AnalyzerPro WCH升级版B…

前端---css 的介绍

1. css 的定义 css(Cascading Style Sheet)层叠样式表,它是用来美化页面的一种语言。 没有使用css的效果图 使用css的效果图 2. css 的作用 美化界面, 比如: 设置标签文字大小、颜色、字体加粗等样式。控制页面布局, 比如: 设置浮动、定位等样式。 3. css 的基本语…

B/S和C/S的区别和联系

B/S和C/S的区别和联系 1 B/S2 C/S3 B/S和C/S区别4 B/S和C/S联系 1 B/S B/S(Brower/Server)架构,也称为B/S结构或B/S模式,是Web兴起后的一种网络结构模式。在这种模式下,Web浏览器成为客户端最主要的软件。系统功能实现…

MongoDB文档操作

3.3 文档操作 3.1 文档介绍 文档的数据结构和 JSON 基本一样。 所有存储在集合中的数据都是 BSON 格式。 BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。 文档是一组键值(key-value)对(即 BSON),一个简单的文档例子如下&…

AI 引擎系列 8 - 运行时比率参数简介

简介 在 Versal AI 引擎 2 一文 中,我们注意到计算图 (graph) 文件中有一行内容用于为每个内核实例定义运行时比率参数。 在本文中,我们将讲解该参数如何影响 AI 引擎应用的资源使用率和性能。 要求 下文要求您通读前几篇 AI 引擎系列博文。 AI 引擎系…

低代码实施复杂应用的实践方法

内容来自演讲:韦有炬 | 柳州知行远企业管理咨询有限公司 | 总经理 摘要 本文探讨了在全民开发时代如何使用低代码实施复杂应用并降低上线风险。文章分析了复杂系统实施失败的风险,包括项目规划不周、人员变动、企业基础管理不足等,并对比了低…