zoukankan      html  css  js  c++  java
  • Annotation(注解)

    Annotation(注解) 概述:

    • 从JDK 5.0 开始,Java 增加了对元数据(MetaData) 的支持, 也就是Annotation(注解)

    • Annotation其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理. 通过使用Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息.

    • Annotation可以像修饰符一样被使用, 可用于修饰包,类, 构造器, 方法, 成员变量, 参数, 局部变量,的声明, 这些信息被保存在Annotation 的 “name=value”对中.

    • Annotation能被用来为程序元素(类, 方法, 成员变量等) 设置元数据

    (元注解:注解的注解) 

    基本的 Annotation:

    • 使用Annotation 时要在其前面增加 @ 符号, 并把该Annotation 当成一个修饰符使用. 用于修饰它支持的程序元素

    • 三个基本的Annotation:

      • @Override: 限定重写父类方法, 该注释只能用于方法

      • @Deprecated: 用于表示某个程序元素(类, 方法等)已过时

      • @SuppressWarnings: 抑制编译器警告.

    自定义 Annotation:

    • 定义新的Annotation 类型使用 @interface 关键字

    • Annotation的成员变量在 Annotation 定义中以无参数方法的形式来声明. 其方法名和返回值定义了该成员的名字和类型.

    • 可以在定义Annotation 的成员变量时为其指定初始值, 指定成员变量的初始值可使用default 关键字

    • 没有成员定义的Annotation 称为标记; 包含成员变量的Annotation 称为元数据 Annotation

    Annotation(注解) 的简单用法:

    创建一个MyAnnotation1:
    public @interface MyAnnotation1 {
      String phone();
    }
    创建一个Student类:

    public enum Student {
      xiaohong,xiaohei,xiaolv;
    }
    创建一个MyAnnotation2:

    public @interface MyAnnotation2 {
      String sex();
      int age();
      double[] score();
      Student stu();
      MyAnnotation1 myAnno();
    }
    调用:

    @MyAnnotation2(sex = "男",age=18,score = {66,58,70},stu = Student.xiaohei,myAnno = @MyAnnotation1(phone = "18632594685"))
    public class Demo1 {
    }

     常用注解:

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

    2.@Retention:注解的保留位置

      RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
      RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
      RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。

    (这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码,且生命周期长度 SOURCE < CLASS < RUNTIME)

    3.@Document:说明该注解将被包含在javadoc
    4.@Inherited:说明子类可以继承父类中的该注解

    心得总结:

    ​   才能一旦让懒惰支配,它就一无可为。

  • 相关阅读:
    java NIO的基本用法
    BufferedReader源码分析
    FileInputStream读中文乱码问题
    Java使用IO流对同一个文件进行读写操作
    php表格--大数据处理
    tp5--模型关联
    tp5 -- join注意事项
    表单外部提交
    网站防止sql注入
    微信网页授权报code been used, hints: [ req_id: XYv1Ha07042046 ]
  • 原文地址:https://www.cnblogs.com/javacyq/p/13603395.html
Copyright © 2011-2022 走看看