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

在这里插入图片描述

🍁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.hqwc.cn/news/299348.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础入门第六节课笔记

while循环 for循环用于针对序列中的每个元素的一个代码块。 while循环是不断的运行,直到指定的条件不满足为止。 while 条件: 条件成立重复执行的代码1 条件成立重复执行的代码2 …….. 当条件成立时,执行下方缩…

Go 泛型发展史与基本介绍

Go 泛型发展史与基本介绍 Go 1.18版本增加了对泛型的支持,泛型也是自 Go 语言开源以来所做的最大改变。 文章目录 Go 泛型发展史与基本介绍一、为什么要加入泛型?二、什么是泛型三、泛型的来源四、为什么需要泛型五、Go 泛型设计的简史六、泛型语法6.1 …

【网络编程】基于UDP数据报实现回显服务器/客户端程序

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌 前言 我们如果…

干货//可以翻页的电子画册制作方法

想象一下,你是一位新晋的时尚品牌设计师,想要向全球展示你的设计理念和产品。传统的纸质画册虽然精美,但无法满足现代人对便捷性和互动性的需求。那么,如何解决这个问题呢? 现在,你可以使用翻页电子画册的制…

【MYSQL】MYSQL 的学习教程(八)之 12 种慢 SQL 查询原因

日常开发中,我们经常会遇到数据库慢查询。那么导致数据慢查询都有哪些常见的原因呢?今天就跟大家聊聊导致 MySQL 慢查询的 12 个常见原因,以及对应的解决方法: SQL 没加索引SQL 索引失效limit 深分页问题单表数据量太大join 或者…

算法——链表

链表常用技巧 画图分析!!!!!!!!!!——直观形象,便于理解、大多数都是模拟引入虚拟头结点(哨兵位) 典型的就是在第一个节点…

IDEA的JavaWeb项目的webapp目录的小蓝点没亮怎么办???

我们可以看到没有小蓝点,正常的是有的。 没有小蓝点的原因:你的webapp 这个文件夹的路径不对。 解决方案:(修改webapp的路径) 我们可以看到,错误的路径是显示红色。 这个地方没有就添加一个路径&#xff0…

广东mes生产管理系统

mes生产管理系统是面向制造企业执行层的生产信息化管理系统。它可以帮助企业实现制造数据管理、计划排程管理、生产调度管理、库存管理、质量管理、人力资源管理、工作与设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层数据集…

处理etcd源码包编译异常

1、下载etcd包,执行go build报异常: client\v2\example_keys_test.go:1:1: expected package, found . client\v3\example_auth_test.go:1:1: expected package, found . client\v3\concurrency\example_election_test.go:1:1: expected package, found…

挖到宝了,大数据分析工具做分析真的太快了

随着企业越做越大,累积数据的速度越来越快,但分析的效率却不升反降,不利于数字化运营决策。但大数据分析工具的出现让这一现象成为过去,无他,就是大数据分析工具做分析的真的太快了,可在任意终端上随时按需…

什么是流媒体

所谓的流媒体是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网上即时传输音视频以供观赏的一种技术。如果没有流媒体技术,那么在观赏前必须下载整个媒体文件。 常见流媒体协议: RTSPRTPHTTPHLSRTMPHTTP-FLV等 目前应用…

欧洲:数百家电商网站泄露了用户支付信息

欧洲刑警组织在12月22日发布的新闻稿中,称由 17 个国家联合参与的执法行动已发现数百个电商平台存在恶意脚本攻击,其用户的信用卡或支付卡数据已遭到泄露。 这项已进行两个月的执法行动由希腊牵头,欧洲刑警组织参与协调,并得到网络…