java 注解学习

news2024/12/26 3:26:23

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.coloradmin.cn/o/571907.html

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

相关文章

Pandas-如何对指定某列的NaN值进行替换或填充

前言 本文是该专栏的第31篇,后面会持续分享python数据分析的干货知识,记得关注。 笔者在本专栏之前有单独详细介绍过,使用Numpy对数组元素进行替换的方法,感兴趣的同学,可翻阅查看“Numpy-如何对数组的元素进行替换”。 而本文来单独介绍pandas对指定列的NaN值进行操作的…

《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序

《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序 题目1题目2题目3题目4题目5题目6总结 题目1 将下面的程序编译、连接,用 Debug 加载、跟踪,然后回答问题 assume cs:code, ds:data, ss:stack data segmentdw 0123h,0456h,0789h,0abch,0def…

github添加ssh-key来支持git项目管理

背景 https://github.com很多时候无法克隆/更新/提交项目,使用gitgithub.com怎没有限制 配置git账户邮箱和用户名 查看配置信息 git config --global --list 配置或者修改用户名,替换为自己github用户名 git config --global user.name "holyl…

【什么是苹果IM推?什么是苹果推?】iMessage推送操纵Apple Push Notification service (APNs)

以帮忙你明白实现iMessage推送的基本原理和步调: 开辟者账户:确保你具有苹果开发者账户,以便访谒苹果开发者中间和相干东西。 APNs认证:iMessage推送操纵Apple Push Notification service (APNs)来发送关照。在苹果开发者中心&a…

Spring支持哪些Aware接口?

Spring支持哪些Aware接口? Spring支持哪些Aware接口?Aware接口的优点ApplicationContextAware和BeanFactoryAware的区别 Spring支持哪些Aware接口? ApplicationContextAware:获取ApplicationContext对象BeanFactoryAware:获取BeanFactory对象BeanNameAware:获取Bean的名称E…

Fiddler抓取HTTPS最“全”攻略,让你成为网络调试大师!

对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler。 在使用Fiddler进行HTTPS抓包时,很多人都会遇到各种各样的问题和困难。 初学时,大家对于fiddler如何抓取HTTPS难免走歪路,也许你一步步按着网上的帖子成功了&#xff0…

Kubernetes 准入控制器

Kubernetes 极大地提高了当今生产中后端集群的速度和可管理性。由于灵活、可扩展、易用,Kubernetes 已成为容器编排的事实标准。Kubernetes 还提供了一系列保护功能。而 Admission Controllers(准入控制器) 是一组安全相关的插件,…

Failed to start application ‘/LM/W3SVC/7/ROOT‘, ErrorCode ‘0x800700c1‘.解决方案

dll相互干扰所致 关闭整个IIS服务 发布选项勾选删除现有文件 即可

Seata AT模式源码解析二(Seata Client端启动流程)

文章目录 初始化TM和RM数据源代理 由于我们一般都是在springboot中使用的,而与springboot集成的我们一般就先看starter的spring.factories文件,看看它的自动装配 这里面主要关注SeataAutoConfiguration和SeataDataSourceAutoConfiguration。 SeataAutoCo…

C# WPF窗体设计器显示以及App.xaml文件打不开

问题描述: 在项目中遇到了App.xaml设计器打不开以及窗体设计器不显示,只有代码,如图所示: 可以明显的看见左下角的设计器不见,但是用户控件又有设计器 解决方法: ①清理项目 ②将不能正常打开的文件右…

Android Studio 2022.3 新版 flamingo 安装步骤及遇到的问题

下载地址: https://developer.android.google.cn/studio D盘中新建一个 Android 文件夹, 用来存储 Android studio 和 SDK 文件. 下载好之后, 运行 exe 文件, 点击 next 注意这个路径最好不要有空格,比如 program files这种目录,不然后面安装sdk的时候会有问题. 点击 instal…

【TI毫米波雷达笔记】IWR6843AOPEVM-G的DCA1000EVM模式配置及避坑

【TI毫米波雷达笔记】IWR6843AOPEVM-G的DCA1000EVM模式配置及避坑 IWR6843AOPEVM-G版本可以直接与DCA1000EVM连接 进行数据获取 不需要连接MMWAVEICBOOST版 直接使用 DCA1000mmWave Studio 软件进行数据采集 在官方手册中 User’s Guide 60GHz 毫米波传感器EVM 有相关模式的开…

基于RetinaNet和TensorFlow Object Detection API实现目标检测(附源码)

文章目录 一、RetinaNet原理二、RetinaNet实现1. tf.train.CheckPoint简介2. RetinaNet的TensorFlow源码 一、RetinaNet原理 待补充 二、RetinaNet实现 1. tf.train.CheckPoint简介 待补充 2. RetinaNet的TensorFlow源码 Step 1:安装Tensorflow 2 Object Detect…

ORB-SLAM3整体流程详解

0. 简介 在之前,作者曾经转过一篇《一文详解ORB-SLAM3》的文章。那篇文章中提到了ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM系统,可以在单目,双目和RGB-D相机上利用针孔或者鱼眼模型运行。与ORB-SLAM2相比,ORB-SLAM3…

软件系统三基座之一:权限管理

软件系统三基座包含:权限管理、组织架构、用户管理。 何为基座,即是有了这些基础,任一相关的“建筑”就能逐步搭建起来。 万丈高楼平地起 一、为什么要权限管理 权限管理,一般指根据系统设置的安全规则或者安全策略,…

集成chatgpt4和midjourney的超强镜像站

昨天发现一个镜像站,和之前发的镜像站不一样,这个集成了midjourney和chatgpt,且免翻,相信给很多很多用户都提供了便利吧! 先把网站贴出来,有兴趣的伙伴可以玩一玩 http://mtw.so/5EoyYy http://mtw.so/5E…

如何在上架App之前设置证书并上传应用

App上架教程 在上架App之前想要进行真机测试的同学,请查看《iOS- 最全的真机测试教程》,里面包含如何让多台电脑同时上架App和真机调试。 P12文件的使用详解 注意: 同样可以在Build Setting 的sign中设置证书,但是有点麻烦&…

浅析 Redis 中 String 数据类型及其底层编码

从 RedisObject 说起 在 Redis 中,任意数据类型的键和值都会被封装为一个 RedisObject ,也叫做Redis对象,源码如下 c 复制代码 /*server.h*/ typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS;…

springboot+vue之java学习平台(java项目源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的java学习平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…

档案库房太乱了怎么办?这个方法秒变高级!

全国有数以万计的大大小小的档案馆,其中有许多非常重要的机要档案,其历史和社会价值非常高,而档案保存的质量、档案的物理寿命、档案的防虫防霉都与库房的空气质量、温湿度息息相关。 解决档案高效管理及利用的安全问题越来越迫切&#xff0c…