10分钟深刻理解 Java高级—— 注解

【1】什么是注解?

  • Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
    注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。
  • 注解不是对注解的代码的操作没有直接影响吗?为什么注解还在Java中如此重要?如何心中还存在这个问题,那么请你一定把这篇博客看完!

【2】注解有什么用?

对于注解的代码部分,可以在程序执行的不同阶段中,根据需求对不同注解标记过的代码进行不同的二次处理,最终影响程序执行。

  • 说白了就是将添加注解的部分,进行特殊标记,让计算机能够认识。

【3】如何使用注解?

一、如何声明注解?

与声明一个"Class"不同的是,注解的声明使用@interface关键字。
如:

public @interface Lance{


}

二、什么是元注解?

在定义注解时,注解类也能够使用其他的注解声明。对注解类型进行注解的注解类,我们称之为 meta-annotation(元注解)。
说白了就是对定义的注解进行注解的那4个语句:

@Target()
@Retention()
@Documented
@Inherited
public @interface Anno {
    
}

在这里插入图片描述

@Target作用

注解标记另一个注解,以限制可以应用注解的 Java 元素类型。
目标注解指定以下元素类型之一作为其值:

  • ElementType.ANNOTATION_TYPE 可以应用于注解类型。
  • ElementType.CONSTRUCTOR 可以应用于构造函数。
  • ElementType.FIELD 可以应用于字段或属性。
  • ElementType.LOCAL_VARIABLE 可以应用于局部变量。
  • ElementType.METHOD 可以应用于方法级注解。
  • ElementType.PACKAGE 可以应用于包声明。
  • ElementType.PARAMETER 可以应用于方法的参数。
  • ElementType.TYPE 可以应用于类的任何元素。
    在这里插入图片描述

@Retention作用(特别重要)

首先明白几个过程:

  • 我们写的.java文件是源码—>编译—>字节码.class—>java虚拟机运行

注解指定标记注解的存储方式:

  • RetentionPolicy.SOURCE - 标记的注解仅保留在源级别中,并被编译器忽略。
  • RetentionPolicy.CLASS - 标记的注解在编译时由编译器保留,但 Java 虚拟机(JVM)会忽略。
  • RetentionPolicy.RUNTIME - 标记的注解由 JVM 保留,因此运行时环境可以使用它。
  • @Retention 三个值中 SOURCE < CLASS < RUNTIME,即CLASS包含了SOURCE,RUNTIME包含SOURCE、CLASS。下文会介绍他们不同的应用场景。
RetentionPolicy.SOURCE

只停留这源码阶段,编译为字节码文件后就丢掉该注解

RetentionPolicy.CLASS

定义为CLASS的注解,会保留在class文件中,但是会被虚拟机忽略(即无法在运行期反射获取注解)。此时完全符合此种注解的应用场景为字节码操作。如:AspectJ、热修复Roubust中应用此场景。所谓字节码操作即为,直接修改字节码Class文件以达到修改代码执行逻辑的目的。在程序中有多处需要进行是否登录的判断。

只停留这源码阶段,编译为字节码文件后就丢掉该注解

RetentionPolicy.RUNTIME

注解保留至运行期,意味着我们能够在运行期间结合反射技术获取注解中的所有信息。

@Documented作用

用于被javadoc工具提取成文档

@Inherited作用

表示允许子类继承父类中定义的注解。

有4个元注解,但我们平时通常使用两个元注解:TargetRetention

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值