注解(Java用于工具处理的标注)

一. 使用注解

1. 含义

        注解是放在类,方法,字段,参数前的一种特殊“注释”,是一种用作标注的“元数据”。

2. 三类注解

        1)由编译器使用的注解,不会编译进.class文件,编译后扔掉;如:@Override、@SuppressWarnings。

        2)由工具处理.class文件使用的注解,编译进.class文件,加载结束后不会加载进JVM,被底层库使用,无需处理。

        3)程序运行期读取的注解,加载后一直存在于JVM中,最常用的注解。

3. 注意

        1)注解配置参数必须都是常量,所以定义注解时就确定了所有参数的值,正常每个参数都有默认值,如果不设置就使用默认值。

        2)如果参数名称是value且只有一个参数,那么可以省略参数名称。

二. 定义注解

1. 含义

        用@interface来定义注解,注解的参数类似无参方法,用default设定一个默认值(最好是!),最常用的参数应命名为value(有且只有它时可以省略参数名称)。

2. 元注解(修饰其他注解)

        1)@Target(最常用)

                定义源码被应用于哪些位置。

                ElementType.TYPE:类或接口或枚举

                ElementType.FIELD:成员变量字段

                ElementType.METHOD:方法

                ElementType.CONSTRUCTOR:构造方法

                ElementType.PARAMETER:方法参数

                ElementType.LOCAL_VARIABLE:能修饰局部变量

                ElementType.ANNOTATION_TYPE:能修饰注解

                ElementType.PACKAGE:能修饰包

        2)@Retention(默认CLASS期间)

                定义了注解的生命周期

                RetentionPolicy.SOURCE:编译期间

                RetentionPolicy.CLASS:class文件

                RetentionPolicy.RUNTIME:程序运行时(自定义常用!)

        3)@Documented

                是否将注解信息添加到javadoc文档中。

        4)@Repeatable(注解可重复,不常用)

                修饰的注解,可在同位置使用多个同样的注解。

        5)@Inherited(继承)

                修饰的注解,仅针对@Target(ElementType.TYPE)类型的类有效,子类可继承父类的注解。

3. 如何定义注解

        1)使用@interface定义注解类。

        2)添加参数、默认值;把最常用的参数定义为value(),所有参数都尽量设置默认值。

        3)添加元注解;必须设置@Targer和@Retention,@Retention一般设置为RUNTIME。

        

三. 处理注解

1. 注意

        1)所有注解都是class,都继承自java.lang.annotation.Annotation。

        2)读取注解,要使用反射,反射API提供的Annotation实例封装了注解的所有信息。

2. 获取注解

        1)判断某个注解是否存在于Class、Field、Method或Constructor。

                Class.isAnnotationPresent(注解.Class)

                Field.isAnnotationPresent(注解.Class)

                Method.isAnnotationPresent(注解.Class)

                Constructor.isAnnotationPresent(注解.Class)

        2)用反射API获取注解

                Class.getAnnotation(注解.Class)

                Field.getAnnotation(注解.Class)

                Method.getAnnotation(注解.Class)

                Constructor.getAnnotation(注解.Class)

                

3. 使用注解

        定义了注解,本身对逻辑程序没有任何影响,编写代码来使用注解,JVM不会自动给注解添加任何处理逻辑。

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

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

相关文章

c实现链表

目录 c实现链表 链表的结构定义: 链表的结构操作: 1、初始化链表 2、销毁链表 3、插入结点 4、输出链表数据 5、查找链表数据 扩展 代码实现 c实现链表 链表的结构定义: /*** 链表结构定义 ***/ typedef struct Node {int data; //…

TCP和UDP相关问题(重点)——6.TCP是如何保证传输的可靠性的?

基于数据块传输:应用数据被分割为合适的数据块发送,并且标记序列号,有了序列号就能将接收到的数据根据序列号进行排序。 校验和:TCP将保持首部和数据的校验和,会检测数据在传输过程中的任何变化,如果校验和…

MPLS VPN功能组件(4)

数据转发过程 VPN数据的转发 顶层公网标签 由LDP分配,指示LSR如何将标签报文从始发的源PE通过LSP标签交换到达目的PE 内层私网标签(VPN标签) 由MP-BGP分配,在将每一条客户路由变为VPNv4路由前缀时会自动为每一条VPNv4前缀关联一个标签 内层私网标签用于…

正版软件 - Proxyman:让网络调试变得更智能、更高效

在软件开发的世界里,网络调试一直是开发者和测试工程师的痛点。传统的调试工具往往操作复杂,界面不够直观,而且性能上也难以满足现代应用的需求。今天,我要向大家介绍一款名为Proxyman的网络调试工具,它以其简洁的界面…

springboot微信小程序 uniapp学习资料分享系统v9uy4

理论意义 当今网络教学已成为各国教育改革 和发展的趋势。因此,构建一个适合交互式课堂教学模式的教学平台就成了当务之 急。 在国内高校,目前交互平台主要用于网络学院的远程教学,至于校园内的正规教学,老师自发建立课程主页的比…

【学网攻】 第(24)节 -- 帧中继(点对点)

系列文章目录 目录 系列文章目录 文章目录 前言 一、帧中继是什么? 二、实验 1.引入 实验拓扑图 实验配置 在帧中继中配置通信链路​编辑 实验验证 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 --…

【Linux网络编程三】Udp套接字编程网络应用场景

【Linux网络编程三】Udp套接字编程网络应用场景 应用场景一:远程命令执行应用场景二:与Windos端相互通信应用场景三:简单聊天1.多线程化2.输入输出分开 应用场景一:远程命令执行 简单的服务器上一篇已经完成,接下来我…

【AIGC核心技术剖析】AI生成音乐:MAGNeT一种直接操作多个音频令牌流的掩码生成序列建模方法

MAGNeT是一种直接操作多个音频令牌流的掩码生成序列建模方法。与先前的工作不同,MAGNeT由一个单阶段、非自回归的变压器组成。在训练期间,论文使用掩码调度器预测从掩码令牌中获得的跨度,而在推断期间,论文通过多个解码步骤逐渐构…

MySQL管理的常用工具(mysqldump备份工具,mysqlimport/source导入工具)

mysqldump mysqldump 客户端工具用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建表,及 插入表的SQL语句。 语法 : mysqldump [options] db_name [tables] mysqldump [options] --database/-B db1 [db2 db3...] mysqldump [options] -…

【go】gorm\xorm\ent多表联查

文章目录 1 gorm2 xorm3 ent 前言:本文介绍golang三种orm框架联表查询 1 gorm type UserTest struct {Count int json:"count,omitempty"Type string json:"type,omitempty" } res : []UserTest{} db.Joins("LEFT JOIN use…

AI智能语音机器人安装方法

销售型的企业,基本靠电话营销拓客来实现效益的最大化。因为电销人员离职率高,且需求量大,需要接连不断的招人来实现业绩目标,电话机器人,贴牌招商,复制多个账户 这些都意味的企业的投入成本越来越大,博主从事多年AI技术…

宋小黑原创高清壁纸分享之蓝白云海

大家好,我是小黑,最近迷上了制作壁纸,哈哈,给大家分享一波,小黑做的美图~ 本期给大家分享的是,小黑原创的蓝白云海主题系统壁纸~ 厌倦了一成不变的壁纸吗? 感到学习负担过重吗? …

python烟花绘制,春节祝福

春节将至,写一个烟花程序给亲近的人 核心逻辑 烟花类: 定义烟花的颜色,更新烟花的轨迹,爆炸,消失等功能,在烟花爆炸的同时也涉及到粒子的创建 class Firework:def __init__(self):# 随机颜色self.colou…

数据结构——单向链表和双向链表的实现(C语言版)

目录 前言 1. 链表 1.1 链表的概念及结构 1.2 链表的分类 2. 单链表接口实现 2.1 数据结构设计与接口函数声明 2.2 创建结点,打印,查找 2.3 尾插,头插,尾删,头删 2.4 插入或删除 2.4.1在指定位置后 2.4.2在…

制作二维码扫描器

目录 前言原料主要的库资源其它 制作准备工作界面功能封装扫描二维码扫描复制扫描结果 成果 打包结尾下载链接 本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。 因此,若需转载/引用本文,请注明作者并附原文链接&am…

云卷云舒:论超级数据库、算网数据库、智算数据库

笔者大胆提出一种“超级数据库”的概念设想。 一、超级能力 就像当初提出“超级计算机”一样,我们是否同样可以提出“超级数据库”的概念呢?当然不是不可以。 二、超级计算机 我们回忆一下“超级计算机”的发展之路,大致经过了如下几个环…

C语言之喝汽水问题

个人主页(找往期文章包括但不限于本期文章中不懂的知识点): 我要学编程(ಥ_ಥ)-CSDN博客 题目: 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实…

ChatGPT 变懒最新解释!或和系统Prompt太长有关

大家好我是二狗。 ChatGPT变懒这件事又有了最新解释了。 这两天,推特用户Dylan Patel发文表示: 你想知道为什么 ChatGPT 和 6 个月前相比会如此糟糕吗? 那是因为ChatGPT系统Prompt是竟然包含1700 tokens,看看这个prompt里面有多…

RabbitMQ-2.SpringAMQP

SpringAMQP 2.SpringAMQP2.1.创建Demo工程2.2.快速入门2.1.1.消息发送2.1.2.消息接收2.1.3.测试 2.3.WorkQueues模型2.2.1.消息发送2.2.2.消息接收2.2.3.测试2.2.4.能者多劳2.2.5.总结 2.4.交换机类型2.5.Fanout交换机2.5.1.声明队列和交换机2.5.2.消息发送2.5.3.消息接收2.5.4…

【Java IO】同步异步和阻塞非阻塞真正的区别!!!

先上结论: 同步异步和阻塞非阻塞真正的区别!!! 假设某个进程正在运行下面这段代码: ...... operatorA......; read(); operatorB......; operatorC......;当进程执行完operatorA后开始进行read系统调用,…