概念

对比 - 注释:用文字描述程序,更程序员看的。
注解:说明程序的,给计算机看的。
image.png

image.png

JDK中预定义的注解

  • @Override : 检测被该注解标注的方法是否是继承自父类的
  • @Deprecated : 将该注解标注的内容,表示为已过时
  • @SuppressWarnings : 压制警告,使此元素以及其子元素不显示编译器警告,一般传递参数all
    • @SuppressWarnings(“all”)

自定义注解

格式
元注解
public @Interface 注解名称{}

本质: 注解的本质就是接口,该接口默认继承Annotation接口
public interface 注解 extends java.lang.annotation.Annotation{}

属性

概念: 接口中的抽象方法

要求: 1. 属性的返回值类型 (仅有几种): 基本数据类型、String、枚举、注解、前4种的数组
2.在定义了属性后,使用时需要给属性赋值 (或者定义时使用default默认赋值)
3.value属性 : 如果只有一个属性需要赋值,且属性名为value,直接赋值即可(可省略value)
4.数组属性,使用大括号包裹,数组中元素个数为1时,可省略大括号。

  1. //自定义注解
  2. public @interface MyAnno {
  3. int age() default 18;
  4. String name();
  5. int[] ints();
  6. }
  7. //使用注解
  8. public class testdemo {
  9. @MyAnno(age = 15,name = "yy",ints = {0,1,5})
  10. public void test(){
  11. }
  12. }

元注解

概念:描述注解的注解

元注解
@Target : 描述注解能够作用的位置
ElementType取值:TYPE(类)、METHOD(方法)、FIELD(成员变量)
@Retention :描述注解被保留的阶段
RetentionPolicy取值:
RUNTIME(通常使用):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
CLASS:当前被描述的注解,会保留到class字节码文件中,不会被JVM读取到
SOURCE:当前被描述的注解,不会保留到class字节码文件中
@Document : 描述注解是否被抽取到api文档当中
@Inherited : 描述注解是否被子类自动继承

使用注解

image.png

个人总结: 注解多用来代替配置文件(xml),使得配置更加灵活,可以在相关代码区域通过注解进行配置。
通过定义注解、注解的属性,在需要调用注解时通过反射得到Class对象上的注解,调用注解抽象方法返回属性值。这一过程实际就是在内存中创建了一个注解接口的子类,实现了属性方法,返回了默认值或者配置值。