Java基础(3)-注解总结

基本概念和语法 书写了一个基本结构: java 源代码中能出现的单词称为“词法单元” 或 “Token”,从 java 语言基本结构可以看出:还可以看出 java 代码其中包含的要素:● 一些英文单词 ● 3 种括号 ● 点操作符 ● 双引号 ● 分号同人类的语言拥有字母、单词、语句、文章类似,编程语言也是由符号、标识符、指令组成,所以不必把编程语言想象过于神话。有了字母可以组词,多个词语又可以组成文。只是在编程语言中,词语不被叫作“单词”,而是被叫作标识符。如果将英文和编程语言对应起来就应该是:● 字母 —— 符号 ● 阅读详情

一.注解的用处和实现原理

1.用处

注解Annotation的出现是为了简化Xml配置带来的复杂性,注解是一种元数据(描述数据的数据),它是一种在运行时被读取或写入的一种特殊标记,用以描述数据的特性或者读取到数据的值。

2.实现原理

注解的实现原理和动态代理一样都是基于反射。

二.元注解

元注解是Java中用于实现自定义注解的元数据,用户自定义的注解都需要通过元注解来进行描述才能生效。

1.@Retention

用于指定被修饰的Annotation可以保留多长时间,只能修饰Annotation定义。@Retention包含一个RetentionPolicy类型的value成员变量,使用@Retention必须为该value成员变量指定值。value成员变量的值有3个选择:

  • RetentionPolicy.CLASS:编译器将把Annotation记录在class文件中。当运行java程序时,JVM不可获取Annotation信息。(默认值)
  • RetentionPolicy.RUNTIME:编译器将把Annotation记录在class文件中。当运行java程序时,JVM也可获取Annotation信息,程序可以通过反射获取该Annotation信息。
  • RetentionPolicy.SOURCE:Annotation只保留在源代码中(.java文件中),编译器直接丢弃这种Annotation。
//注解保留到运行时,可以通过反射获取到该注解
@Retention(RetentionPolicy.RUNTIME)
public @interface DemoAnnotation {}
2.@Target

用于指定被修饰到Annotation可以修饰哪些类型。

  • @Target(ElementType.ANNOTATION_TYPE):指定该该策略的Annotation只能修饰Annotation.
  • @Target(ElementType.TYPE) //接口、类、枚举、注解
  • @Target(ElementType.FIELD) //成员变量(字段、枚举的常量)
  • @Target(ElementType.METHOD) //方法
  • @Target(ElementType.PARAMETER) //方法参数
  • @Target(ElementType.CONSTRUCTOR) //构造函数
  • @Target(ElementType.LOCAL_VARIABLE)//局部变量
  • @Target(ElementType.PACKAGE) ///修饰包定义
  • @Target(ElementType.TYPE_PARAMETER) //java8新增
  • @Target(ElementType.TYPE_USE) ///java8新增
3.@Documented

用于指定被修饰的Annotation将被javadoc工具提取成文档。即说明该注解将被包含在javadoc中。

4.@Inherited

用于指定被修饰的Annotation具有继承性。即子类可以继承父类中的该注解。

三.注解成员变量

在注解中可以设置注解的成员变量,以便之后获取到该注解的特定所需数据:

/*
 * @Author ARong
 * @Description 使用@interface关键字定义注解
 * @Param
 * @return
 **/
// 注解保留到运行时,可以被反射所解析
@Retention(RetentionPolicy.RUNTIME)
// 注解修饰对对象可以是类、接口与枚举类型
@Target(ElementType.TYPE)
// 注解可以被编入文档
@Documented
// 注解可以被继承
@Inherited
public @interface DemoAnnotation {
    // 以方法签名定义注解的成员变量
    int id() default 1;// 定义默认值
    String name();
}
  • 使用注解
/**
 * @Auther: ARong
 * @Description: 测试自定义注解
 */
@DemoAnnotation(id = 6, name = "HelloWorld")
public class TestDemoAnnotation {
}

四.提取注解数据

使用注解的最主要目的之一就是在运行时提取注解中所含有的数据,以用于完成其他的操作。那么要如何获取到注解的数据呢?首先要知道的是,所有的注解的父接口都为java.lang.Annotation接口,所以只需要通过反射,在运行时动态地获取到Annotation接口,再将Annotation接口转换为具体的注解类,然后就可以通过注解类中自定义的成员变量(也就是成员方法)去获取到注解中的信息了。

1.AnnotationElement接口

AnnotationElement接口位于java.lang.reflect包下,实现它的类就表明可以通过反射获取到该类的注解信息,而实现了该接口的类有:

  • AccessibleObject
  • Class
  • Constructor
  • Executable
  • Field
  • Method
  • Package
  • Parameter

所以可以先使用反射获取到上述的类,然后通过这些就可以调用AnnotationElement接口规定的方法来获取和该类相关的代码了,AnnotationElement接口有规定了以下几个常用的方法:

  • T getAnnotation(Class annotationClass)
    :获取该元素指定的注解,如果该注解不存在则返回null

  • Annotation[] getAnnotations():获取该元素所有的所有注解

  • default boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) : 判断该元素上是否含有该注解。

  • Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注解。

  • T getDeclaredAnnotation(Class annotationClass):返回直接修饰该程序元素的指定类型的注解,不存在则返回 null。 (java8新增)

在这里插入图片描述

2.获取类上的注解并提取注解中的数据
/**
 * @Auther: ARong
 * @Description: 测试自定义注解
 */
@Deprecated
@DemoAnnotation(id = 6, name = "HelloWorld")
public class TestDemoAnnotation {

    /*
     * @Author ARong
     * @Description 获取类上的注解并提取数据
     * @Param
     * @return
     **/
    @Test
    public void testGetClassAnnotationMessage() {
        // 反射获取到类
        Class<TestDemoAnnotation> clazz = TestDemoAnnotation.class;
        Annotation[] annotations = clazz.getAnnotations();
        for (Annotation annotation : annotations) {
            System.out.println(annotation.toString());
            if (annotation instanceof DemoAnnotation) {
                // 将Annotation转化为为DemoAnnotation并提取数据
                System.out.println(((DemoAnnotation) annotation).id());
                System.out.println(((DemoAnnotation) annotation).name());
            }
        }
    }
}

输出

@java.lang.Deprecated()
@thinking_in_java.annotation_learn.DemoAnnotation(id=6, name=HelloWorld)
6
HelloWorld

五.自定义注解

有一篇文章讲得很好,这里就不赘述了:
https://blog.youkuaiyun.com/lb850747906/article/details/52145346

Java | 参数(Parameter) 参数(Parameter),是 Java 编程语言中位于方法和构造方法声明内的一种变量,用来为方法和构造方法提供额外的信息。参数始终被归类为“变量”(而不是“字段”)。 阅读详情

相关推荐

JAVA中的注解可以继承吗?

注解想必大家都用过,也叫元数据,是一种代码级别的注释,可以对类或者方法等元素做标记说明,比如Spring框架中的@Service,@Component等。那么今天我想问大家的是类被继承了,注解能否继承呢?可能会和大家想的不一样,感兴趣的可以往下看。自定义注解可以通过标记元注解@Inherited实现注解的继承,不过这只适用于类。如果要继承定义在接口或方法上的注解,可以使用Spring的工具类。

m0_71777195的博客 1067

Java注解的解释——@Param

@param

dingliqiang4的博客 4727

Java常用注解大全(基于JDK17+SpringBoot3)

用原生注解+第三方验证注解。等SpringCloud注解。:自动装配(新版推荐用。:标记Mapper接口。自定义注解的实现步骤。

海姐软件测试的博客 964

@Param详解

Param注解是一种用于标记方法参数的注解,它用于指定该参数的名称和类型,在使用该参数时可以通过名称来引用。在不同的编程语言和框架中,@Param注解的具体用法和功能可能会有所不同。在Java开发中,如果用到了mybatis,那么@Param是用户给方法参数指定一个名称,以便在Mapper XML文件中引用该参数。总结起来,@Param注解用于在Mapper接口方法中明确指定参数的名称,以提高方法的可读性和可维护性。

Java领域 1万+

3、Java注解:从基础到应用

本文详细介绍了Java注解的基础概念、定义方式及其在实际开发中的应用场景。内容涵盖了注解类型的方法限制、元素默认值的设置、不同类型的注解元素使用、注解的简写语法以及注解在测试框架、代码审查和配置管理中的典型应用。通过本文,开发者可以全面了解Java注解的使用方法和最佳实践,从而提升Java程序的可读性、可维护性和开发效率。

mmm90的博客 97

基于大模型的肾结石诊疗全流程风险预测与方案制定研究报告

目录一、引言1.1 研究背景与意义1.2 国内外研究现状1.3 研究目标与内容二、大模型技术原理与应用概述2.1 大模型的基本原理2.2 大模型在医疗领域的应用进展2.3 适用于肾结石预测的大模型选择与依据三、术前风险预测与准备3.1 患者身体状况评估3.2 结石情况分析3.3 术前准备方案制定四、术中风险预测与应对4.1 出血风险预测与处理4.2 脏器损伤风险预测与预防4.3 实时监测与决策支持五、术后恢复预测与护理5.1 恢复时间预测5.2 护理要点与措施5.3 并发症预防与处理六、并发症风险预测与管理

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1149

Java注解-3种基础注解

@Override @SuppressWarnings(String) @Deprecated 这3个注解是java.lang包提供的3个基本注解。先理解的这3个注解再去学习自定义注解。

ShunXiangL的博客 572

Windows下CMake的下载与安装详解

目录一、CMake介绍二、CMake的下载与安装 一、CMake介绍 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 二、CMake的下载与安装 CMake下载链接:https://cmake.org/download/。 下载最新稳定版即可(Latest Release): 下载完成后,单击“Next”按钮,在下图中勾选“I acce

Wendy的博客 8万+

Java基础3-枚举类与注解

Java基础3-枚举类与注解

qq_43517845的博客 857

三维点云孔洞修复(附Python代码和公共点云数据集链接)

(1)物体自身缺失(2)物体自身形状复杂,很多凹凸面不够规则甚至存在空腔,空腔内部无法被三维激光扫描仪扫描到(3)物体部分区域对激光扫描不敏感,未被扫描上(4)扫描仪的扫描稳定性。

yanghl1215的博客 6954

DDR4 IP的用户接口

DDR4 IP核用户接口

bowen_wener的博客 1927

java mysql 反射_java基础之反射和注解3

第三节 注解的使用3.1认识注解Annotation ,JDK1.5新提供的技术我们在编程中经常会使用到注解,作用有:1)编译检查:比如@SuppressWarnings, @Deprecated 和 @Override 都具有编译检查作用2)替代配置文件:使用反射来读取注解信息目前大部分框架(如Spring)都使用了注解简化代码并提高编码的效率(使用注解之前使用的xml进行配置)注解其实就是代码...

weixin_28829629的博客 216

SAP Script表单开发中ABAP preform方法的实战应用与调试技巧

本文深入探讨了在SAP Script表单开发中调用ABAP程序(preform方法)的实战应用与调试技巧。通过一个获取供应商版本名称的实例,详细讲解了如何在SE71中嵌入PERFORM指令、编写ABAP子程序进行数据查询与处理,并重点介绍了使用SAP Script Debugger进行高效调试的方法,帮助开发者灵活扩展表单功能,实现复杂业务逻辑。

o0p1q2r3的博客 554

Java笔记7 Java基础加强<3>注解

33_张孝祥_Java基础加强_了解和入门注解的应用 l  了解注解及java提供的几个基本注解。 Ÿ   先通过@SuppressWarnings的应用让大家认识和了解一下注解: Ø  通过System.runFinalizersOnExit(true);的编译警告引出@SuppressWarnings("deprecation") Ÿ   @Deprecated Ø  直接在刚才的类

l_215851356的专栏 650

影刀初级考试操作题2

题型E主要考察了Excel的操作,总体上难度不大,流程也很少。有些细节地方比如是追加还是覆盖,多试几次就没问题了。

weisili2012的博客 1万+

arcgis密度分析

密度分析 密度分析是指根据输入的要素数据集计算整个区域的数据集状况,从而产生一个连续的密度表面。通过计算密度,将每个采样点的值散布到整个研究区域,并获得输出栅格中每个像元的密度值。在 ArcGIS 中,分布密度的计算方法有点密度分析、线密度分析和核密度分析三种。 1.点密度分析 导入实验数据居民点图层和道路图层 在自定义里勾选空间分析模块Spatial Analyst 点击空间分析工具中密度分析内的点密度分析, 参数设置如下,其中输出像元大小表示输出栅格数据集的像元大小。值越小.

Jasenjane的博客 2万+

JavaSE笔记(2.3)Java基础 -注解

前言 注解(Annotation)挺常见的,尤其是在spring框架中更是必须掌握的 注解类似与一个标签,例如在类上注解就相当于把标签贴在类上,然后标签里的东西就可以修饰这个类 这个讲的挺详细的,跟随着学习:聊聊Java中的注解 注解 ...

key_768的博客 245

【大语言模型 37】知识蒸馏深度实战:大模型向小模型迁移

本文深入探讨了知识蒸馏技术在大语言模型领域的应用,详细阐述了如何将庞大复杂的大模型知识有效迁移到轻量级小模型中。文章系统介绍了知识蒸馏的理论基础、多种蒸馏损失函数设计、特征匹配与注意力迁移技术、渐进式蒸馏策略以及全面的效果评估方法。通过实战案例和完整代码实现,读者将掌握从理论到实践的知识蒸馏全流程,了解如何在保持模型性能的同时显著降低计算资源需求,实现大语言模型的高效部署与应用。

熵数实验室 1510

Java8基础(3):元注解/自定义注解

·

mingyuli的博客 644

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java注解接收上传文件,JavaWeb基础知识day17——注解&Servlet3.0实现文件上传

注解注解:jdk5之后提供了一个特性,和类 接口同级格式:@interface 注解名{}作用:编译期检查替代配置文件定义注解(元注解:注解上的注解)分析代码(用到反射)////////////////////////java中3个注解(理解)@Override:声明该方法是从父类上继承过来的,执行编译期的检查@SuppressWarnings:抑制警告 值有好多,只需要知道一个 all 抑制所...

weixin_36231529的博客 309

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java字符集配置注解_1-3. SpringBoot基础,Java配置(全注解配置)取代xml配置

最近突发奇想,整合一下以前一些学习笔记,分享自己这几年爬过的坑,逐步更新文章,谢谢大家的关注和支持。这节讲一下SpringBoot的学习必须的一些基础,Java配置。其实在Spring2.0时代就已经有注解配置了,但是开发人员还是喜欢注解和xml混合配置,当SpringBoot出来后,这个全注解配置,即Java配置就成为主流。讲一个例子在SpringMVC+Spring+Mybatis框架整合时,...

weixin_32306175的博客 152

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java-Web 基础加强之泛型、注解和Servlet3.0新特性

目录   一、泛型 1.泛型类 2.泛型方法 3.继承(实现)泛型类(接口) 4.通配符         (1)通配符概述         (2)通配符的缺点         (3)通配符的限制         (4)带有下边界的通配符         (5)带有下边界的通配符         (6)通配符小结 二、注解 1.注解的概述 2.java中的注解 3.定...

yfy的博客 461

Java注解详解

看了https://pdai.tech/md/java/basic/java-basic-x-annotation.html#%E6%B3%A8%E8%A7%A3%E7%9A%84%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF关于注解机制的详解收获很多,转载加补充。

weixin_61558375的博客 1968

@springbootapplication 注解_Spring Boot 最核心的 3 个注解详解

点击上方“Java研发军团”,选择“置顶公众号”关键时刻,第一时间送达!阅读本文需要5分钟最近面试一些 Java 开发者,他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过。然而,当我问他们 Spring Boot 最核心的 3 个注解是什么,令我失望的是鲜有人能答上来,这样你能说你对 Spring Boot 很了解吗?这可能还会给你减分!你所需具备...

weixin_36289813的博客 285

@import注解_Spring Boot 最核心的 3 个注解详解

最近面试一些 Java 开发者,他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过。然而,当我问他们 Spring Boot 最核心的 3 个注解是什么,令我失望的是鲜有人能答上来,这样你能说你对 Spring Boot 很了解吗?这可能还会给你减分!你所需具备的基础什么是 Spring Boot?Spring Boot 核心配置文件详解Spring Boot...

weixin_29785723的博客 114
上一篇: SpringBoot学习笔记(13)-使用MyBatis分页插件PageHelper
下一篇: 算法学习笔记(4)-快速排序
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值