IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 元注解_Retention&Target&Documented&Inherited -> 正文阅读

[Java知识库]元注解_Retention&Target&Documented&Inherited

什么是元注解?元注解就是修饰其他注解的注解

例如:

JDK5.0提供了四种元注解:Retention、Target、Documented、Inherited

【1】Retention

可以Retention注解的作用是:描述注解保留的时间范围(即:被描述的注解在它所修饰的类中可以保留到何时)

Retention注解用来限定那些被它所注解的注解类在注解到其他类上以后,可被保留到何时,共三种策略,定义在RetentionPolicy枚举中,使用@Retention时必须为该value成员变量指定值:

public enum RetentionPolicy{
    SOURCE, //源文件保留
    CLASS, //编译期保留,默认值
    RUNTIME, //运行期保留,可通过反射去获取注解信息
}

RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译器直接丢弃这种策略的注释,在.class文件中不会保留注解信息

案例:

?

?反编译查看字节码文件:发现字节码文件中没有MyAnnotation这个注解

RetentionPolicy.CLASS:在.class文件中有效(即class保留),保留在.class文件中,但是当运行java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解,如果注释没有加Retention元注解,那么相当于默认的注解就是这种状态

Retention.RUNTIME:在运行时有效(即运行时保留),当运行java程序时,JVM会保留注释,加载在内存中,那么程序可以通过反射获取该注释

?【2】Target

Target用于修饰注解的注解,用于指定被修饰的注解能用于修饰哪些程序元素(类、属性、方法、构造器...),@Target也包含一个名为value的成员变量

案例:

import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.ElementType.FIELD;

@Target({TYPE,FIELD})//TYPE和FIELD只在修饰类和属性时有效
public @interface MyAnnotation {
	
}

?【3】Documented

????????Documented注解的作用是:描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。

  1. 创建一个带有@Documented修饰的自定义注解类MyDocumentedAnnotation
  2. 再创建一个MyDocumentedTest类
  3. 使用一下命令为MyDocumentedTest类生成帮助文档(API)
  4. 查看API可发现:只要是被MyDocumentedAnnotation注解修饰的不管是类方法还是属性等,上面都保留了MyDocumentedAnnotation的注解信息

【4】Inherited

????????Inherited注解的作用是:使被它修饰的注解具有继承性(如果某个类使用了被@Inherited修饰的注解,则其子类将自动具有该注解)。

import java.lang.annotation.Inherited;

@Inherited//修饰自定义注解MyAnnotation
public @interface MyAnnotation {
	
}
@MyAnnotation//修饰父类
public class Person {

}
//由于父类Person被@Inherited修饰的自定义@MyAnnotation修饰了,因此子类也继承了@MyAnnotation
public class Student extends Person{

}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:26:14  更:2022-05-09 12:28:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:20:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码