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:说明子类可以继承父类中的该注解

心得总结:

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

原文地址:https://www.cnblogs.com/javacyq/p/13603395.html