注解应用

1. 注解说明

注解(Annotation)又叫标注,是从 Java5 开始增加的一种引用数据类型
注解的本质就是标记代码,标记后的代码可以执行指定的特殊处理
自定义注解自动继承 java.lang.annotation.Annotation 接口
注解体中只有成员变量没有成员方法,而注解的成员变量以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型
如果注解只有一个参数成员,建议使用参数名为 value,而类型只能是八种数据类型、String 类型、Class 类型、enum 类型以及 Annotation 类型

2. 元注解

元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其他的注解上面

@Retention
设置注解的生命周期

  • RetentionPolicy.CLASS:注解只在源码阶段保留,在编译时将被丢弃
  • RetentionPolicy.SOURCE:注解只会保留到程序运行的时候,不会加载到JVM中(默认)
  • RetentionPolicy.RUNTIME:注解可以保留到程序运行的时候,会被加载到JVM

@Target
指定被修饰的注解能用于那些元素的修饰

  • ElementType.ANNOTATION_TYPE:可以给一个注解进行注解
  • ElementType.CONSTRUCTOR:可以给构造方法进行注解
  • ElementType.FIELD:可以给属性进行注解
  • ElementType.LOCAL_VARIABLE:可以给局部变量进行注解
  • ElementType.METHOD:可以给方法进行注解
  • ElementType.PACKAGE:可以给一个包进行注解
  • ElementType.PARAMETER:可以给一个方法内的参数进行注解
  • ElementType.TYPE:可以给类进行注解
  • ElementType.TYPE_PARAMETER:表示该注解能写在类型变量的声明语句中,如泛型Java8开始
  • ElementType.TYPE_USE:Java8开始表示该注解能写在使用类型的任何语句中

@Inherited
并不是说注解本身可以继承,而是说如果一个超类被该注解标记过的注解进行注解时,如果子类没有被任何注解应用时,则子类就继承超类的注解

@Documented
类和方法的Annotation在缺省情况下是不出现在javadoc中的,所以使用 @Documented 可以生成注解的文档

@Repeatable
表示自然可重复的含义,从Java8开始增加新特性

3. 常用注解

注解 说明
@Override 限定重写父类方法,该注解只能用于方法
@Deprecated 用于表示所修饰的元素(类,方法等)已过时
@SuppressWarnings 抑制编译器警告

4. 自定义注解

  1. 创建自定义注解
    1. @Target(ElementType.TYPE)
    2. @Retention(RetentionPolicy.RUNTIME)
    3. public @interface Name {
    4. public String value() default "默认值";
    5. }
    说明:
  • @Target(ElementType.TYPE) 该注解只能注解在类上
  • @Retention(RetentionPolicy.RUNTIME) 注解会被加载到JVM中
  1. 创建一个类使用该注解 ```java @Name(“student”) public class Person{

}


3. 通过反射获取类上的注解
```java
Name annotation = Person.class.getAnnotation(Name.class);
System.out.println(annotation.value());