1.注解

1、注解也被称为元数据,用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息

2、和注释一样,注解不影响程序逻辑、但参与编译或运行,相当于嵌入在代码中的补充信息

3、在JavaSE中,注解的使用目的较为简单,在JavaEE中注解占据了更为重要的角色,例如用来配置应用程序的任何切面

4、注解的本质就是接口,该接口默认继承Annotation接口

  1. public interface MyAnno extends java.lang.annotation.Annotation

2.基本Annotation介绍

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

三个基本的Annotation:

1、@Override:限定某个方法,是重写父类方法,该注解只能用于方法

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

3、@SuppressWarnings:抑制编译器警告

3.元注解

1、Retention 指定注解的作用方位,三种Source,class,runtime,

2、Target 指定注解在哪些地方可以使用

3、Documented 指定该注解是否在javadoc体现

4、inherited 子类会继承父类注解

  1. // 5. 元注解
  2. // @Target:描述注解能够作用的位置
  3. //* ElementType取值:
  4. //** TYPE:可以作用到类上
  5. //** METHOD:可以作用于方法上
  6. //** FILED:可以作用于字段
  7. // @Retention:描述注解保留的阶段
  8. //* RetentionPolicy取值:
  9. //** RetentionPolicy.RUNTIME:当前的注解会被保留到class字节码文件中,并被jvm读取到
  10. // @Documented:描述注解是否被抽取到api文档中
  11. // @Inherited:描述注解是否被子类继承

4.注解中的属性

1、属性的返回值类型有以下种类:String、枚举、注解或者是三种类型的数组

2、定义了属性,在使用时需要给其赋值操作

  1. 2.1、如果定义属性时,使用default关键字给默认属性初始化值,则使用注解时,可以不进行属性的赋值
  2. 2.2、如果只有一个属性需要赋值,并且属性的名称为value,则value可以省略,直接定义即可使用
  3. 2.3 数组赋值时,值使用{}包括,如果数组中只有一个值,则{}省略

3、解析注解

  1. @Pro(className = "junit.Calculate", methodName = "add" )
  2. public class ReflectTest {
  3. public static void main(String[] args) {
  4. /**
  5. * 解析注解
  6. */
  7. //1. 获取该类的字节码对象
  8. Class<ReflectTest> reflectTestClass = ReflectTest.class;
  9. //2. 获取上边的注解对象
  10. Pro annotation = reflectTestClass.getAnnotation(Pro.class);
  11. //该方法实际上在内存中生成了一个该注解接口的子类实现对象,并有className和methodName方法
  12. //3. 调用注解对象中定义的抽象方法,获取返回值
  13. String className = annotation.className();
  14. String methodName = annotation.methodName();
  15. System.out.println(className + methodName);
  16. }
  17. }