注解(Java程序的一种特殊“注释”,用于工具处理的标注)

1.使用注解

a.含义

        i.注解是放在类,字段,方法,参数前的一种特殊“注释”。
        ii.注释会被编译器直接忽略,注解则可以被编译器打包带进class文件,因此,注解是一种用于标注的“元数据”。
        iii.从JVM角度看,注解对代码逻辑没有任何影响,如何使用注解完全由工具决定。

b.三类注解

        i.由编译器使用的注解,不会编译进.class文件,编译后被编译器扔掉;如:@Override、@SuppressWarnings。
        ii.由工具处理.class文件使用的注解,有些工具在加载class的时候,对class动态处理实现特定功能。这类注解会被编译进.class文件,加载结束后不会加载进JVM,被底层库使用,无需处理。
        iii.程序运行期读取的注解,加载后一直存在于JVM中,最常用的注解。(Java代码读取注解实现功能,JVM并不识别该注解)

c.注意

        i.定义注解时,配置参数类型:
                1.所有基本类型;
                2.String;
                3.枚举;
                4.所有基本类型,String,枚举以及Class的数组。
        ii.注解配置参数必须是常量,所以定义注解时就确定了所有参数的值,正常每个参数都有默认值,如果不设置就使用默认值。
        iii.如果参数名称是value且只有一个参数,那么可以省略参数名称。

2.定义注解

a.含义     

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

b.元注解(修饰其他注解的注解)

        i.@Target(最常用)
                定义源码被应用于哪些位置。
                1.ElementType.TYPE:类或接口或枚举或Record。
                2.ElementType.FIELD:成员变量字段。
                3.ElementType.METHOD:方法。
                4.ElementType.CONSTRUCTOR:构造方法。
                5.ElementType.PARAMETER:方法参数。
                6.ElementType.LOCAL_VARIABLE:局部变量。
                7.ElementType.ANNOTATION_TYPE:注解。
                8.ElementType.PACKAGE:包。

        ii.@Retention(默认CLASS期间)
                定义了注解的生命周期。
                1.RetentionPolicy.SOURCE:仅编译期间。
                2.RetentionPolicy.CLASS:仅class文件。
                3.RetentionPolicy.RUNTIME:程序运行期(自定义常用!)

        iii.@Documented
                是否将注解信息添加到javadoc文档中。
        iv.@Repeatable(注解可重复,不常用)
                修饰的注解,可在同位置使用多个同样的注解。

        v.@Inherited(继承)
                定义子类是否可继承父类定义的注解。仅针对@Target(ElementType.TYPE)类型的注解有效,并且仅针对class的继承,对interface的继承无效。

c.如何定义注解

        i.使用@interface定义注解类。
        ii.添加参数、默认值;把最常用的参数定义为value(),所有参数都尽量设置默认值。
        iii.添加元注解;必须设置@Targer和@Retention,@Retention一般设置为RUNTIME。

3.处理注解

a.注意

        i.所有注解都是class,都继承自java.lang.annotation.Annotation。
        ii.读取注解,要使用反射,反射API通过Class实例封装了类的所有信息。

b.获取注解 

        i.判断某个注解是否存在于Class、Field、Method或Constructor。
                1.Class.isAnnotationPresent(注解.Class)
                2.Field.isAnnotationPresent(注解.Class)
                3.Method.isAnnotationPresent(注解.Class)
                4.Constructor.isAnnotationPresent(注解.Class)
        ii.用反射API获取注解。
                1.Class.getAnnotation(注解.Class)
                2.Field.getAnnotation(注解.Class)
                3.Method.getAnnotation(注解.Class)
                4.Constructor.getAnnotation(注解.Class)

c.使用注解

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

                2.使用注解。

                3.编写代码来使用注解。

4.常用注解

a.@RequestBody和@RequestParam()

        i.@RequestParam()
                1.一般与get请求一起使用,一个方法中可以有多个,用来接收普通参数。
                2.加上该注解,表示参数必传,并且指定前端传过来的参数名。
                3.可以通过required = false设置参数为非必传,非必传时可设置默认值defaultValue = "0"。
        ii.@RequestBody
                1.一般与post请求一起使用,一个方法中只能有一个,用来接收json格式的数据。
                2.将json数据转化成Map形成的key-value键值对
        iii.注意
                1.如果不是放在请求体里可以用@RequestParam()接收,也可以什么都不写。

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

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

相关文章

设计模式之建造者模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、建造者模式2、建造者模式使用场景3、优点4、缺点5、主要角色6、代码示例:1)实现要求2)UML图3)实现步骤:1)创建一个表示食物条目和食物包装的接口2)创建实现Packing接口的实体类3&a…

NeMo Curator 整理用于 LLM 参数高效微调的自定义数据集

目录 概述 预备知识 定义自定义文档构建器 下载数据集 解析和迭代数据集 将数据集写入 JSONL 格式 使用文档构建器加载数据集 使用现有工具统一 Unicode 格式 设计自定义数据集过滤器 编辑所有个人识别信息 添加指令提示 整合管线 概述 出于演示目的,本…

QXml 使用方法

VS2019 QT 编译工具链问题解决 使用winqtdeploy.exe 打包环境就可以正常运行,缺少某一个运行库引起的 简易使用python脚本编译运行 Python3 中的 slots 和 QT 中的 slots 宏定义重复, 放在不同的文件中进行调用可以避免 还是比较习惯从源码包引入(方便定…

相机光学(三十七)——自动对焦原理

1.自动对焦的三种方式 目前在手机上采用的自动对焦系统包括反差对焦、相位对焦和激光对焦三种方案,下面我们来看一下它们的工作原理和相互之间的区别是什么。 1.1反差对焦【CDAF】- Contrast Detection Auto Focus 反差对焦是目前普及率最高、使用最广泛、成本相对…

哈希表、算法

哈希表 hash: 在编程和数据结构中,"hash" 通常指的是哈希函数,它是一种算法,用于将数据(通常是字符 串)映射到一个固定大小的数字(哈希值)。哈希函数在哈希表中尤为重要…

视觉SLAM ch5——相机与图像

一、单目模型 前言:本大标题下1~4部分讲述的都是单目针孔相机 SLAM的数学本质可以抽象为运动方程(x)和观测方程(z)(书上的第二部分) 教材第二章截图 书中P24页截图 其中的未知量为xk&#xff…

Golang | Leetcode Golang题解之第398题随机数索引

题目: 题解: type Solution []intfunc Constructor(nums []int) Solution {return nums }func (nums Solution) Pick(target int) (ans int) {cnt : 0for i, num : range nums {if num target {cnt // 第 cnt 次遇到 targetif rand.Intn(cnt) 0 {ans …

Gin-封装自动路由

O.0 思路一、API二、控制层三、自动路由核心四、分组路由外加中间件使用 思路 由于Java转Go直接使用的goframe框架,然学习Gin时觉得一个接口一个路由太麻烦,于是有了...1、在请求结构体中采用标签的形式,直接给出路由和请求方式 2、在控制层…

Golang开发之路

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Go协程及并发锁应用指南

概念 协程(Goroutine)是Go语言独有的并发体,是一种轻量级的线程,也被称为用户态线程。相对于传统的多线程编程,协程的优点在于更加轻量级,占用系统资源更少,切换上下文的速度更快,不…

pyflink 安装和测试

FPY Warning! 安装 apache-Flink # pip install apache-Flink -i https://pypi.tuna.tsinghua.edu.cn/simple/ Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/ Collecting apache-FlinkDownloading https://pypi.tuna.tsinghua.edu.cn/packages/7f/a3/ad502…

【Docker部署ELK】(7.15)

1、拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.0 docker pull docker.elastic.co/kibana/kibana:7.15.0 docker pull docker.elastic.co/logstash/logstash:7.15.02、配置文件(解压资源到D盘DOCKER目录下) 2.1 配置文件…

什么是java的spi?

Java SPI(Service Provider Interface)是一种提供服务发现机制的设计模式,允许在运行时动态地发现、加载和替换服务的实现。SPI机制的核心思想是:通过接口定义服务,并且使用外部的实现类来提供该服务的具体功能。 目录…

【delphi】判断多显示器下,程序在那个显示器中

在 Delphi 中,如果你的电脑连接了多个显示器,可以通过以下步骤判断某个程序在哪个显示器上运行。 方法概述: 获取程序窗口的位置(例如窗体的 Left、Top 坐标)。使用 Screen.MonitorFromWindow 函数来确定该窗口所属的…

【STM32】单级与串级PID控制的C语言实现

【STM32】单级与串级PID的C语言实现 前言PID理论什么是PIDPID计算过程PID计算公式Pout、Iout、Dout的作用单级PID与串级PID PID应用单级PID串级PID 前言 笔者最近在学习PID控制器,本文基于Blog做以总结。CSDN上已有大量PID理论知识的优秀文章,因此本文将…

短信验证码倒计时 (直接复制即可使用) vue3

需求&#xff1a; 要实现一个获取验证码的需求&#xff0c;点击获取验证码60秒内不可以重复点击&#xff0c;方式有两种可以直接复制使用&#xff1b; 效果图 实现方案 方案1 (单个文件内使用比较推荐) <el-button :disabled"codeDisabled" click.stop"h…

【在Linux世界中追寻伟大的One Piece】网络命令|验证UDP

目录 1 -> Ping命令 2 -> Netstat命令 3 -> Pidof命令 4 -> 验证UDP-Windows作为client访问Linux 4.1 -> UDP client样例 1 -> Ping命令 Ping命令是一种网络诊断工具&#xff0c;它使用ICMP(Internet Control Message Protocol&#xff0c;互联网控制消…

redis常见的数据类型?

参考&#xff1a;一文读懂Redis五种数据类型及应用场景 - 知乎 (zhihu.com) String 类型 String 类型&#xff1a;Redis 最基本的数据类型&#xff0c;它是二进制安全的&#xff0c;意味着你可以用它来存储任何类型的数据&#xff0c;如图片、序列化对象等。使用场景&#xff…

Qt入门教程---项目创建全过程内存泄漏解释

目录 1.创建项目的说明 2.代码介绍说明 2.1文件分类介绍 2.2sources文件 2.3widget.ui文件 2.4widget.h文件 2.5中间文件 2.6.pro文件 3.打印输出hello world 3.1图形化界面生成控件 3.2代码生成控件 3.3打印结果展示 4.对于内存泄露的讨论 4.1对象树 4.2与栈开辟…

一图读懂 若依后端

一图读懂 若依后端 关注我&#xff0c;评论区评论就能获得思维导图本体文件啦&#x1f604;。如果你愿意关注我的掘金就更好啦宝&#x1f60d;&#xff0c;因为我掘金文章就一内内人看&#xff0c;想引流&#x1f60b; https://juejin.cn/user/1942157160101860本图是对若依后…