• 学习Java注解


    注解,英文Annotation,他究竟起的什么作用,为什么就需要使用注解呢?

      注解是JDK1.5才引入的。它的作用可以从三方面来说,

    第一个用于编写文档,通过在代码中设置注解可以生成文档【Javadoc文档】;

    第二个是代码分析,通过代码里标识的元数据对代码进行分析【使用反射】 ;

    第三个是编译检查,通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】。

      了解了注解的基本功能,我们要来看看注解是什么,有哪些注解。我们先关注一下java自带的注解。

    @Override
    它的作用是对覆盖超类中方法的方法进行标记
    1 public class OverrideDemoTest {
    2     //@Override
    3     public String tostring() {
    4         return "测试注解";
    5     }
    6 }

    @Deprecated

    它的作用是对不应该再使用的方法添加注解

     1 public class DeprecatedDemoTest {
     2     public static void main(String[]args) {
     3         // 使用DeprecatedClass里声明被过时的方法
     4         DeprecatedClass.DeprecatedMethod();
     5     }
     6 }
     7  
     8 class DeprecatedClass {
     9     @Deprecated
    10     public static void DeprecatedMethod() {
    11     }
    12 }

    @SuppressWarnings

    其参数有:
    deprecation,使用了过时的类或方法时的警告
    unchecked,执行了未检查的转换时的警告
    fallthrough,当 switch 程序块直接通往下一种情况而没有 break 时的警告
    path,在类路径、源文件路径等中有不存在的路径时的警告
    serial,当在可序列化的类上缺少serialVersionUID 定义时的警告
    finally ,任何 finally 子句不能正常完成时的警告
    all,关于以上所有情况的警告
    1 public class SuppressWarningsDemoTest {
    2     public static List list = new ArrayList();
    3     @SuppressWarnings("unchecked")
    4     public void add(String data) {
    5         list.add(data);
    6     }
    7 }

    上面三个注解是jdk自带的,只能完成一些简单的功能,如果想要让注解发挥更大作用,就需要编程人员自定义注解。元注解就此出现——@Retention @Target @Document @Inherited四种。

    自定义注解样例:

      @Documented  
      @Retention(RetentionPolicy.RUNTIME)  
      @Target(ElementType.ANNOTATION_TYPE)  
      public @interface Target {  
          ElementType[] value();  
      }  

    1 @Retention: 定义注解的保留策略

    @Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含;

    @Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得;

    @Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在,在运行时可以通过反射获取到;


      首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解;如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,则可选用 SOURCE 注解。

    2 @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) ///包    

    3 @Document:说明该注解将被包含在javadoc中

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

    详细例子有时间再补

  • 相关阅读:
    BZOJ 3105: [cqoi2013]新Nim游戏
    informatica增量抽取图文
    informatica ETL增量抽取(时间戳)
    kafka connector 使用总结以及自定义connector开发(×××××)
    Kafka Connect JDBC-Source 源连接器配置属性
    kafka-connect-jdbc-sink配置属性
    得到自1970年1月1日以来的秒数
    kafka-connect-jdbc(重要)
    confluent kafka-connect-jdbc(非常重要)
    kafka集群版 connectors 通过REST API实现控制
  • 原文地址:https://www.cnblogs.com/wutongblog/p/9438569.html
Copyright © 2020-2023  润新知