zoukankan      html  css  js  c++  java
  • Java之Annotation

    一、概述

      Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在 代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存 在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件、或者运行时中出现(SOURCE/CLASS/RUNTIME)。

    二、知识提要。

    (一)Java.lang.annotation包

        这个包提供了Java对注解的支持策略。

    1.Annotation接口

        Annotation是被所有注解类型扩展的接口。注意,扩展Annotation后的接口不需要定义注解类型,而且Annotation接口本身也没有定义注解类型。

    2.ElementType枚举

        ElementType枚举中的常量可以在元素声明时对其进行分类。其常量被元注解Target使用,来指明被元注解Target描述的注解A可以被使用的领域。

        其常量取值如下,其含义是在该情况下注解A可以使用:

        ANNOTATION_TYPE      注解类型的声明

        CONSTRUCTOR     构造函数的声明

        FIELD        领域类型(包括枚举常量)的声明

        LOCAL_VARIABLE   局部变量的声明

        METHOD        方法的声明

        PACKAGE       包的声明

        PARAMETER      参数的声明

        TYPE            类、接口(包括注解)和枚举类型的声明

        示例:

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Target;
    
    @Target({ElementType.TYPE, ElementType.METHOD}) // 定义注解作用的目标:接口、类、枚举、注解,方法。
    public @interface Before {
    }

         这样就可以在接口、类、枚举、注解,方法的声明时使用@Before注解了。

    3.RetentionPolicy枚举

        其取值被元注解Retention使用,说明了被Retention所描述的注解A的信息保存的策略。

        其取值和含义如下:

        SOURCE      注解A信息只保存在源文件中,被编译器丢弃

        CLASS        注解A信息被编译器吸纳,并保存到.class文件中,但是不会随.class文件被加载到VM中

        RUNTIME      注解A信息随.class问价被加载到VM中

    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    
    @Retention(RetentionPolicy.RUNTIME) // 注解信息被加载到VM 
    public @interface Before {
    }

        这样,@Before的信息就会被加载到VM中去。

    4.Documented注解

        表明一个元素内的注释默认会被javadoc等工具归档。当一个元素内的注释会影响该元素被用户使用时,应被Documented注解,使其注释成为公共API的一部分。

    5.Inherited元注解

         表明被描述的注解A是自动继承的。若注解A在声明过程中被元注解Inherited描述,那么用户可以在一个类中查询注解A,如果该类没有注解A就从其父类中查询注解A,这样直到注解A被找到或者查询到Object类为止。

        示例:

    import java.lang.annotation.Inherited;
    
    @Inherited // 允许子类继承父类的注解
    public @interface Before {
    }

    6.Retention注解

        描述被注解A信息的保存策略,其取值为RetentionPolicy枚举型的常量值。示例参照RetentionPolicy。

    7.Target注解

       表明被描述的注解类型A的作用目标,其取值为ElementType枚举类型的常量值。示例参照ElementType。

    8.AnnotationTypeMismatchException异常

        若注解类型在编译或者序列化后发生了改变,则访问编译或序列化后的注解时抛出此异常。

    9.IncompleteAnnotationException异常

        在注解类型被编译或者序列化后,若添加新的元素到该注解的类型定义,访问该新元素时抛出此异常。如果新元素有默认值则不抛出异常。

    10.AnnotationFormatError

        当语法解析器从Class文件中读取注解并且认为该注解存在缺陷时,抛出此异常。

    三、应用

  • 相关阅读:
    寒假作业 疫情统计(2/2)
    2020春 软工实践寒假作业(1/2)
    个人作业——软件工程实践总结&个人技术博客
    使用Angular HttpClient与后端通信
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    寒假作业(2/2)
    NSArray
    NSDate和NSDateFormatter
    NSNumber和NSString
  • 原文地址:https://www.cnblogs.com/chenshi/p/3888348.html
Copyright © 2011-2022 走看看