java中的注解及元注解

本文详细介绍了JAVA中的四种元注解,包括@Target、@Retention、@Documented和@Inherited的功能与用途。解释了这些注解如何作用于不同的程序元素,并展示了它们在不同场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA中的注解

 

 

四种元注解:

    元注解:注解的注解,即java为注解开发特准备的注解。

     ①: @Target表示该注解用于什么地方

 

@Target:注解的作用目标

        

        @Target(ElementType.TYPE)   //接口、类、枚举、注解

        @Target(ElementType.FIELD) //字段、枚举的常量

        @Target(ElementType.METHOD) //方法

        @Target(ElementType.PARAMETER) //方法参数

        @Target(ElementType.CONSTRUCTOR)  //构造函数

        @Target(ElementType.LOCAL_VARIABLE)//局部变量

        @Target(ElementType.ANNOTATION_TYPE)//注解

        @Target(ElementType.PACKAGE) /// 

 

 

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.ANNOTATION_TYPE)

public @interface Target {

ElementType[] value();

}

public enum ElementType {

    /** 类,接口(包括注解类型)或enum声明  */

    TYPE,

    /** 域声明(包括 enum 实例) */

    FIELD,

    /** 方法声明 */

    METHOD,

    /** 参数声明 */

    PARAMETER,

    /** 构造器声明 */

    CONSTRUCTOR,

    /** 局部变量声明  */

    LOCAL_VARIABLE,

    /** Annotation type declaration */

    ANNOTATION_TYPE,

    /**  包声明  */

    PACKAGE,

    /**

     * 类型参数声明

     * @since 1.8

     */

    TYPE_PARAMETER,

    /**

     * 类型的使用

     * @since 1.8

     */

    TYPE_USE

}

 

 

.@Retention:: 表示该注解可以保存的范围

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.ANNOTATION_TYPE)

public @interface Retention {

 

    RetentionPolicy value();

}

public enum RetentionPolicy {

    /**

     * 源代码:即此注解只能保存在源代码中

     * 当编译时,会被丢弃

     */

    SOURCE,

 

   /**

     * class文件:即此注解可以在class文件中保留

     * 但会被jvm丢弃

     */

    CLASS,

 

   /**

     * 运行期:即此注解可以在运行时保留

     * 可以通过反、反射获得

     */

    RUNTIME

}

注解@Retention可以用来修饰注解,是注解的注解,称为元注解。
Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy3个值:CLASS  RUNTIME   SOURCE
@Retention(RetentionPolicy.CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候;
@Retention(RetentionPolicy.SOURCE )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中;
@Retention(RetentionPolicy.RUNTIME )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,
所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.

 

 

@Documented  :: 即拥有这个注解的元素可以被javadoc此类的工具文档化。它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@return,@param 等。

 

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.ANNOTATION_TYPE)

public @interface Documented {

}

 

@Inherited : 允许子类继承父类中的注解。即拥有此注解的元素其子类可以继承父类的注解。

 

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.ANNOTATION_TYPE)

public @interface Inherited {

}

 

@Interface

 

 

@interface 不是interface,是注解类

 

jdk1.5之后加入的,java没有给它新的关键字,所以就用@interface 这么个东西表示了

这个注解类,就是定义一个可用的注解

 

转载于:https://my.oschina.net/u/3892666/blog/1862975

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值