一:注解(Annotation)概述

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
Java 语言中的类、方法、变量、参数和包等都可以被标注。
框架 = 注解 + 反射 + 设计模式

二:常见的注解示例

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

  1. //在编译时进行格式检查(JDK内置的三个基本注解)
  2. @Override:限定重写父类方法,该注解只能用于方法
  3. @Deprecated:用于表示所修饰的元素(类、方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择。
  4. @SuppressWarnlngs:控制编译器警告

三:自定义注解

  1. 定义新的 Annotation类型使用@interface关键字。
  2. 自定义注解自动继承了java.lang.annotation.Annotation接口。
  3. Annotation的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。我们称为配置参数。类型只能是八种基本数据类型、String类型、Class类型、enum类型、 Annotation类型、以上所有类型的数组。
  4. 可以在定义Annotation的成员变量时为其指定初始值,指定成员变量的初始值可使用default关键字。
  5. 如果只有一个参数成员,建议使用参数名为value
  6. 如果定义的注解含有配置参数,那么使用时必须指定参数值,除非它有默认值。格式是“参数名=参数值”,如果只有一个参数成员,且名称为value,可以省略"value="
  7. 没有成员定义的Annotation称为标记,包含成员变量的Annotation称为元数据Annotation
  8. 注意:自定义注解必须配上注解的信息处理流程(使用反射的方式)才有意义。
  1. /**
  2. * 如何自定义注解?参照 @SuppressWarnings定义。
  3. * 1.注解声明为 @interface。
  4. * 2.内部定义成员:通常使用value表示。
  5. * 3.可以指定成员的默认值,使用default定义。
  6. * 4.如果自定义注解没有成员,表明是一个标识作用。
  7. * 5.如果注解有成员,在使用注解时,需要指明成员的值,如果有默认值,则不用。
  8. */
  9. //@interface和接口没有任何关系,只不过是一个固定的结构
  10. public @interface MyAnnotation {
  11. String value() default "hello";
  12. }

四:JDK中的元注解

(1)四个基本元注解

  1. 作用在其他注解的注解(或者说--元注解)是:
  2. @Retention - 标识这个注解怎么保存,是只在代码中(SOURCE),还是编入class文件中(CLASS)(默认行为),或者是在运行时可以通过反射访问(RUNTIME)。
  3. @Documented - 标记这些注解是否包含在用户文档中。
  4. @Target - 用于指定被修饰的Annotation能用于修饰哪些程序元素。
  5. @Inherited - 被修饰的Annotation将具有继承性。
  6. 类比:元数据(对现有数据进行修饰)。
  7. String neme = "hgk";
  8. 其中,hgk就是元数据。

五:利用反射获取注解信息

六:JDK 8 中注解的新特性

(1)可重复注解

(2)类型注解