zoukankan      html  css  js  c++  java
  • 注解介绍

    注解@Retention可以用来修饰注解,是注解的注解,称为元注解

    Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型

    /** * Annotation retention policy.

    The constants of this enumerated type

    * describe the various policies for retaining annotations. They are used

    * in conjunction with the {@link Retention} meta-annotation type to specify

    * how long annotations are to be retained.

    * * @author Joshua Bloch

    * @since 1.5

    */

    public enum RetentionPolicy {

    /**

    * Annotations are to be discarded by the compiler.

    */ SOURCE,

    /**

    * Annotations are to be recorded in the class file by the compiler

    * but need not be retained by the VM at run time. This is the default

    * behavior.

    */ CLASS,

    /**

    * Annotations are to be recorded in the class file by the compiler and

    * retained by the VM at run time, so they may be read reflectively.

    * * @see java.lang.reflect.AnnotatedElement

    */ RUNTIME }

    /**

    *注释保留策略。此枚举类型的常数

    *描述保留注释的各种策略。使用它们

    *与{@link Retention}元注释类型一起指定 *注释要保留多长时间。

    *

    * @作者约书亚·布洛赫

    * @since 1.5

    * / public enum RetentionPolicy{

    /** *保留源文件,编译成Class注释将被编译器丢弃。

    * / SOURCE,

    /** 注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;

    * / Class,

    /** 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

    * * @see java.lang.reflect.AnnotatedElement

    * / RUNTIME }

    .java<.class<内存中的字节码

    首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用

    @Inherited:说明子类可以继承父类中的该注解

    @Target:注解的作用目标

    public @interface Target {

    /**

    * Returns an array of the kinds of elements an annotation type

    * can be applied to.

    * @return an array of the kinds of elements an annotation type

    * can be applied to

    */ ElementType[] value();

    }

      /** *返回可应用于注释类型的元素类型的数组。

    * @返回注释类型中元素类型的数组可以应用到

    * /

     ElementType

    /* *版权所有(c)2003,2013,Oracle和/或其附属公司。保留所有权利。 *ORACLE专有/机密。使用须遵守许可条款。

    */ 包java.lang.annotation;

    /** *这种枚举类型的常量提供了一个简单的语法位置分类,在那里注释可能出现在Java程序中。这些常数用于

    {@link Target java.lang.annotation.Target}元注释,指定在何处编写给定类型的注释是合法的。

    * *

    注释可能出现的语法位置分为声明上下文,其中注释适用于声明,而类型上下文,其中注释适用于声明和表达式中使用的类型。

    * *

    常数 {@link#ANNOTATION_TYPE}, {@link#构造函数}, {@link#字段}, {@link#局部变量}, {@link#方法}, {@link#包}, {Link Ly*参数}, {@link#类型}, {Link LyTyType参数}对应于JLS.94.4.1中的声明上下文。

    * *

    例如,类型是用{@code@Target(ElementType.FIELD)}进行元注释的注释只能作为字段声明的修饰符写入。

    * *

    常量{@link#TYPE USE}对应于JLS 4.11中的15个类型上下文,以及两个声明上下文:类型声明(包括注释类型声明)和类型参数声明。

    * *

    例如,类型是用{@code@Target(ElementType.type_USE)}进行元注释的注释可以写在字段的类型上(如果是嵌套的、参数化的或数组类型,则可以写在字段的类型内),也可以显示为类声明的修饰符。

    * *

    常量{@code TYPE_USE}包括类型声明和类型参数声明,以方便为注释类型提供语义的类型检查程序的设计者。

    例如,如果注释类型{@code non null}是用{@code@Target(ElementType.Type_ USE)}进行元注释的,

    则类型检查器可以将{@code@NonNull}{@code class C{…}}视为类{@code C}的所有变量都是非空的,

    同时仍然允许其他类的变量为非空或非空,

    这取决于{@code@non null}是否出现在变量的声明中。

    * *@作者乔舒亚·布洛赫 *@从1.5开始 *@jls 9.6.4.1@目标 *@jls 4.1类型和值的种类

    */ public enum ElementType{

    /**类、接口(包括注释类型)或枚举声明

    */

    TYPE,

    /**字段声明(包括枚举常量)

    */

    FIELD,

    /**方法声明

    */

    METHOD,

    /**形式参数声明

    */

    PARAMETER,,

    /**构造函数声明

    */

    CONSTRUCTOR,

    /**局部变量声明

    */

    LOCAL_VARIABLE,

    /**注释类型声明

    */

    ANNOTATION_TYPE,

    /**包声明

    */

    PACKAGE,

    /** *类型参数声明 **@从1.8开始 */

    TYPE_PARAMETER

    /**

    TYPE_PARAMETER

    * *@从1.8开始

    *

    / TYPE_USE }

    @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)——包

     @Document

    *表示带有类型的注释将由javadoc记录

    *和默认的类似工具。应使用此类型来注释

    *声明类型的注释会影响到annotated的使用

    *客户提供的元素。如果一个类型声明被注释了

    *记录,它的注释成为公共API的一部分

    *注释的元素。 *

    一点点学习,一丝丝进步。不懈怠,才不会被时代淘汰
  • 相关阅读:
    [例程]string.trim().length()的用法
    用各种look and feel打造swing界面
    深入浅出Java多线程(1)方法 join
    eclipse中cvs使用配置
    什么时候用Vector, 什么时候改用ArrayList?
    array,vertor,arraylist,hashable,hashmap等几个易混淆概念的区别
    java.lang.Class.getResource()这哥个方法主要是做什么用
    织梦dedecms实现按照字母搜索的实现方法
    浅析JTable与TableModel、TableCellRenderer、TableCellEditor接口——使用JComboBox显示单元格的值
    用java –jar 命令运行Jar包
  • 原文地址:https://www.cnblogs.com/wangbiaohistory/p/12522153.html
Copyright © 2011-2022 走看看