注解(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,一经查实,立即删除!

相关文章

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] -…

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

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

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…

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

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

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系统调用,…

代码随想录 Leetcode376. 摆动序列

题目&#xff1a; 代码&#xff08;首刷看解析 2024年2月9日&#xff09;&#xff1a; class Solution { public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 1) return nums.size();int direction 0;//1上升&#xff0c;0下降int res 0;//res…

【Linux】Shell编程

Shell编程 目录 Shell编程1.shell基础1.输入重定向 & 输出重定向2.管道3.特殊字符(3.1)通配符(3.2)引号(3.3)注释符(#) 4.别名5.命令历史history 2.Shell脚本Shell脚本的执行方式(1)为脚本文件加上可执行权限,然后在命令行直接输入shell脚本文件名执行。(2)sh shell脚本名(…

STM32控制JQ8400语音播报模块

时间记录&#xff1a;2024/2/7 一、JQ8400引脚介绍 标示说明ONE LINE一线操作引脚BUSY忙信号引脚&#xff0c;正在播放语音时输出高电平RX串口两线操作接收引脚TX串口两线操作发送引脚GND电源地引脚DC-5V电源引脚&#xff0c;3.3-5VDAC-RDAC输出右声道引脚DAC-LDAC输出左声道…

机器学习:分类决策树(Python)

一、各种熵的计算 entropy_utils.py import numpy as np # 数值计算 import math # 标量数据的计算class EntropyUtils:"""决策树中各种熵的计算&#xff0c;包括信息熵、信息增益、信息增益率、基尼指数。统一要求&#xff1a;按照信息增益最大、信息增益率…

mysql8.0 正值表达式Regular expressions (sample database classicmodels _No.5)

mysql8.0 正值表达式Regular expressions 准备工作&#xff0c;可以去下载 classicmodels 数据库资源如下 [ 点击&#xff1a;classicmodels] (https://download.csdn.net/download/tomxjc/88685970) 也可以去我的博客资源下载 https://download.csdn.net/download/tomxjc/8…