java 注解学习

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)来指定该注解可以应用于类、接口、枚举和注解类型上。这意味着,如果一个类上使用了该注解,则这个注解同样可以应用于该类的所有子类以及实现的接口、枚举和注解类型上。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【PyQt5】指示灯显示

【PyQt5】指示灯显示 1、背景2、代码示例3、QtDesigner绘制1、背景 利用Qt5写工业控制软件交互界面的时候,经常需要在界面上有指示灯功能。 例如下面的明暗表示串行端口的连接和断开。 我们本质是用Qt5的label文本标签来实现的,即通过设置标签的样式表来实现的。 假设labe…

使用Windbg静态分析dump文件的一般步骤详解

目录 1、概述 2、静态分析dump文件的一般步骤 2.1、查看异常类型 2.2、使用.ecxr命令切换到发生异常的线程上下文,查看发生异常的那条汇编指令 2.3、使用kn/kv/kp命令查看异常发生时的函数调用堆栈 2.4、使用lm命令查看模块的时间戳,找到对应的pdb…

8个升级到ChatGPT Plus的理由,不升级你就out了

​关注文章下方公众号,可免费获取AIGC最新学习资料 导读:ChatGPT Plus 是 OpenAI 聊天机器人的高级付费版本。以每月 20 美元的价格,该服务为您提供访问 GPT-4,您可以享有令人难以置信的稳定性和更快的响应时间。 本文字数&#…

img[:, :, ::-1] 通俗理解

👨‍💻个人简介: 深度学习图像领域工作者 🎉工作总结链接:https://blog.csdn.net/qq_28949847/article/details/128552785 链接中主要是个人工作的总结,每个链接都是一些常用demo&#xff0c…

知识付费小程序搭建 为有价值的知识买单

以前我们学习写作遇到难题的时候,总喜欢上网搜一下参考资料,但是不知具体从何时起,很多平台内容查看都要钱了。这说明知识付费已经深入到我们的生活中了。再加上疫情爆发这几年,很多教育培训机构都抓住风口,开发了线上…

Web应用技术(第十四周/END)

本次练习基于how2j和课本,初步认识Spring。 以后我每周只写一篇Web的博客,所有的作业内容会在这篇博客中持续更新。。。 一、Spring基础1.Spring概述:2.Sring组成:3.BeanFactory:4.控制反转:5.依赖注入:6.JavaBean与S…

【六一 iKun】Happy LiuYi, iKuns

六一了,放松下。 Python iKun from turtle import * screensize(1000,1000) speed(6)#把衣服画出来,从右肩膀开始#领子 penup() goto(-141,-179) pensize(3) fillcolor("black") pencolor("black") begin_fill() pendown() left(1)…

30天从入门到精通TensorFlow1.x 第二天,变量 tf.Variable()

文章目录 一,接前一天(1).内容前先弄清楚 sess.run() 函数a. 该函数干嘛的b. 该函数有哪些参数c. 该函数的使用 (2).由库函数创建张量(3).由库函数创建张量 二、变量tf.Variable()(1…

Dart语法学习

最近在学习flutter相关方面的知识,里面用到了Dart语言,于是写下这篇博客记录学习的一门过程。如果你有其他编程语言的经验(尤其是Java和JavaScript),可以很快的上手Dart语言,Dart 在设计时应该是同时借鉴了…

AI注册流程

1、首先需要有一个OpenAI账号,如果有方法的,就可以自己先注册一下。如果没有方法的,还有一个付费版本的可以备选,亲测可用。 2、注册建议使用谷歌账号关联登录,最方便。微软账号太慢了,也可以使用。注册使用…

Git的安装和环境变量的配置

目录 前言一、下载Git二、安装Git三、检查是否安装成功四、 配置用户名和邮箱五、环境变量配置1. 获取git的安装路径2. 设置环境变量 前言 当我们第一次在新电脑上使用git命令的时候,会报错【git 不是内部或外部命令,也不是可运行的程序 或批处理文件】…

企业工程项目管理系统源码-专注项目数字化管理-Java工程管理-二次开发

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…

javaWeb 酒店民宿预定信息管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh酒店民宿预定信息管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为T…

【十一】设计模式~~~结构型模式~~~代理模式(Java)

【学习难度:★★★☆☆,使用频率:★★★★☆】 6.1. 模式动机 在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户端和目标对象之间起…

CTR预估之DNN系列模型:FNN/PNN/DeepCrossing

前言 在上一篇文章中 CTR预估之FMs系列模型:FM/FFM/FwFM/FEFM,介绍了FMs系列模型的发展过程,开启了CTR预估系列篇章的学习。FMs模型是由线性项和二阶交互特征组成,虽然有自动学习二阶特征组合的能力,一定程度上避免了人工组合特征…

Springboot中使用mail邮件

Springboot中使用mail邮件发送 1、配置邮箱的POP3/SMTP服务和IMAP/SMTP服务2、导入依赖和一些默认#配置新的3、发送邮件4、整合工具类 1、配置邮箱的POP3/SMTP服务和IMAP/SMTP服务 这里使用的是QQ邮箱,进入设置-账户,开启下服务。 开启后获取授权码,保存…

智能路由器开发之OpenWrt简介

智能路由器开发之OpenWrt简介 1. 引言 1.1 智能路由器的重要性和应用场景 智能路由器作为网络通信的核心设备,具有重要的地位和广泛的应用场景。传统的路由器主要提供基本的网络连接功能,但随着智能家居、物联网和大数据应用的快速发展,对于…

Typora+PicGo+阿里云OSS搭建博客图床

✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Cisyam-Shark的博客 💞当前专栏: 程序日常 ✨特色专栏&…

每日一题——删除字符串中的所有相邻重复项

每日一题 删除字符串中的所有相邻重复项 题目链接 思路 这是一道用栈解决的典型题目 我们先来看看栈的基本性质: 栈:是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端称为栈顶&#xff0c…

【PC迁移与管理】上海道宁为每个用户和每个 PC 传输和迁移场景提供解决方案——PCmover

PCmover 是一款 可以自动将所有选定文件、 文件夹、设置、用户配置文件 甚至应用程序 从旧PC传输、恢复和升级到 新PC或操作系统的软件 而且由于 大多数迁移的应用程序 都已安装在新PC上即可使用 通常无需查找旧CD 以前下载的程序 序列号或许可证代码 开发商介绍 La…