java中的注解及元注解

JAVA中的注解java

 

 

四种元注解:jvm

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

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

 

@Target:注解的做用目标spa

        

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

        @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 这么个东西表示了

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

相关文章
相关标签/搜索