java 注解学习

news/2024/11/17 20:34:07/

Java 语言中存在三类注解,分别是元注解(Meta-annotations)、Java 内置注解(Built-in Annotations)和自定义注解(Custom Annotations)。

1、元注解(Meta-annotations)

元注解是指用于注解其他注解的注解。Java 语言中内置了数个元注解,包括@Retention、@Target、@Inherited、@Documented、@Repeatable 等。通常情况下,创建新注解时,也会使用到这些元注解来描述新注解。

下面是一些元注解的含义和示例:

  • @Retention:用于描述注解的保留策略,即注解信息在运行时是否还保留在类文件中。示例代码:@Retention(RetentionPolicy.RUNTIME)。
  • @Target:用于指定注解可以应用的目标类型(类、方法、属性等),可以出现在注解声明的自定义注解上。示例代码:@Target(ElementType.METHOD)。
  • @Inherited:用于指定子类是否自动继承父类上的注解。示例代码:@Inherited。
  • @Documented:用于指定注解是否包含在 JavaDoc 中。示例代码:@Documented。

2、Java 内置注解(Built-in Annotations)

Java 内置注解是指 Java 标准库中所提供的一些注解,它们在 Java 应用程序开发中有广泛的应用,如 @SuppressWarnings、@Override 等。Java 内置注解的使用方式和普通注解类似。

下面是一些 Java 内置注解的示例:

  • @Override:表示当前方法将覆盖其父类中的同名方法。示例代码:@Override。
  • @SuppressWarnings:表示取消编译器或 IDE 的警告信息。示例代码:@SuppressWarnings(“unchecked”)。
  • @Deprecated:表示已经不建议使用的程序元素。示例代码:@Deprecated。

3、自定义注解(Custom Annotations)

自定义注解是指开发者自己创建的一些注解,用于添加程序元素的元数据信息。自定义注解是 Java 应用程序开发中的一项重要机制,例如 Spring MVC 中的@RequestMapping、@RequestBody、@Autowired 等,都是自定义注解。

下面是一个自定义注解的示例:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {String name() default "MyAnnotation";String value() default "";
}

上述代码中,我们创建了一个名为 @MyAnnotation 的自定义注解,该注解包含两个元素:name 和 value。其中,name 元素是必填项,它指定了注解的名称;value 元素是选填项,用于设置注解的具体值。

总之,注解是一种非常强大和灵活的 Java 语言机制,它可以为 Java 应用程序添加更多丰富的元数据信息,方便开发者在程序运行时进行元数据的读取和处理,提高程序的可读性和可维护性。

@Target(ElementType.TYPE) 是用于指定注解所能应用到程序元素的种类,其中的 ElementType.TYPE 表示注解可以应用到类、接口(包括注解类型)或枚举上。

具体而言,该注解可以用于标注类、接口、枚举以及注解类型声明上,也就是说,在编写注解时,我们可以通过这个注解指定这个注解可以用于哪些类、接口、枚举或注解类型上。

下面是一个示例,演示如何使用 @Target(ElementType.TYPE) 声明一个自定义注解 @MyAnnotation,以便将该注解应用在类、接口、枚举和注解类型上:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {String value() default "";
}

在上述代码中,我们使用注解@Target(ElementType.TYPE)来指定该注解可以应用于类、接口、枚举和注解类型上。这意味着,如果一个类上使用了该注解,则这个注解同样可以应用于该类的所有子类以及实现的接口、枚举和注解类型上。


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

相关文章

Git错误non-fast-forward的解决方法

1、问题描述 当要push代码到git时,出现提示: $ git push origin master To ../remote/ ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to ../remote/ 2、分析问题 Dealing with “non-fast-forward” …

flask mysql Echart 实现数据库数据图表展示

实现步骤 第一步:准备数据库第二步:准备Echart第三步:绑定数据库信息和图表⚠️需要注意的几个地方 第一步:准备数据库 这部分内容查看我的上一篇内容: python flask p5.js mysql 实现数据库查询并网页显示数据 通过前…

目前国内有哪些开源的非 SaaS 团队协作平台、项目管理工具呢?

以下是一些常用的开源团队协作平台和项目管理工具: 1.Gitea Gitea 是一个轻量级的 Git 服务,它提供了一个基于 Web 的界面,以方便地管理 Git 存储库。Gitea 也是一个自托管的 Git 服务,可以轻松地在本地或云环境中部署。 2.GitL…

手摸手教你Vite+Vue3项目初始化及开源部署到GItee

项目初始化 本片文章主要记录项目的环境,项目搭建。 在开始本次学习中,鉴于你有前端三件套和vue的知识基础。 文档创建于2023年5月20日,大家都去过情人节了~我在肝代码! 环境的搭建 node版本使用18.16.0。 目前(202…

经典组件知识(zookeeper,kafka,ngix)

关于zookeeper的具体介绍 优化的点可以在于zookeeper吗&#xff1f; 如何安装使用&#xff1f; #include <zookeeper/zookeeper.h> 1、先配置java环境JDK&#xff0c;因为需要用java编译&#xff1b; 2、下载zk源码&#xff0c;解压&#xff1b; 3、重命名配置文件zoo_sa…

《汇编语言》- 读书笔记 - 第3章-寄存器(内存访问):mov、add、sub、push、pop

《汇编语言》- 读书笔记 - 第3章-寄存器&#xff08;内存访问&#xff09; 3.1 内存中字的存储问题 3.1 3.2 DS 和 [address]问题 3.2 3.3 字的传送问题 3.3问题 3.4 3.4 mov、add、sub 指令3.5 数据段问题 3.53.1~3.5 小结检测点 3.1 3.6 栈3.7 CPU 提供的栈机制问题 3.6 3.8 …

深度学习语义分割篇——FCN源码解析篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;深度学习语义分割篇——FCN原理详解篇 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&…

Transformer仅有自注意力还不够?微软联合巴斯大学提出频域混合注意力SpectFormer

本文介绍一篇来自英国巴斯大学&#xff08;University of Bath&#xff09;与微软合作完成的工作&#xff0c;研究者从频率域角度入手探究视觉Transformer结构中的频域注意力和多头注意力在视觉任务中各自扮演的作用。 论文链接&#xff1a; https://arxiv.org/abs/2304.06446 …