1. 注解(Annotation)

  1. 位于源码中(代码/注释/注解),使用其他工具进行处理的标签
  2. 注解用来修饰程序的元素,但不会对被修饰的对象有直接的影响
  3. 只有通过某种配套的工具才会对注解信息进行访问和处理
  4. 主要用途
  • 提供信息给编译器/IDE工具
  • 可用于其他工具来产生额外的代码/配置文件等
  • 有一些注解可在程序运行时访问,增加程序的动态性

普通自带注解:(直接修饰JAVA对象)

  1. @Override 表示继承和改写
  2. @Deprecated 表示废弃
  3. @SuppressWarnings 表示压制警告
  4. @SafeVarargs 不会对不定项参数做危险操作
  5. @FunctionInterface 声明功能性接口

元注解:(可以修饰注解)

  1. @Target 设置目标范围
  2. @Retention 设置保持性
  3. @Documented 文档
  4. @Inherited 注解继承
  5. @Repeatable 此注解可以重复修饰

自定义注解:

2. 普通注解

  1. @Override
  1. 修饰方法,检查该方法是父类的方法,如果不是编译器会报错
  2. 避免代码错误
  1. @Deprecated
  1. 修饰类/类的元素/包
  2. 标注为废除,建议程序员不再使用这个类/元素/包
  1. @SuppressWarnings("")
  1. 可以修饰变量/方法/构造函数/类等
  2. 压制各种不同类型的警告信息,使得编译器不显示警告
  3. @ SuppressWarnings 常用警告类型:
  • @SuppressWarnings("all"),忽略所有的警告
  • @SuppressWarnings("cast"),忽略类转型警告
  • @SuppressWarnings("serial"),忽略实现Serializable接口的,没有定义serialVersionUID
  • deprecated,unchecked
  • 使用javac -X 可以看当前的编译器使用哪些警告类型

3. 元注解

元注解是用来修饰注解的注解,修饰定义的注解

  1. @Retention(保留注解)
  1. 这个注解用来修饰其他注解的存在范围
  2. @Retention(RetentionPolicy.SOURCE) 注解仅存在.java,不在class文件。(不能通过反射获取)
  3. @Retention(RetentionPolicy.CLASS) 这是默认的注解保留策略注解存在于.class文件,但是不能被JVM加载。(不可以通过反射获取)
  4. @Retention(RetentionPolicy.RUNTIME) 这种策略下,注解可以被JVM运行时加载和访问。通常情况下,可以结合反射来做一些事情。(可以通过反射获取)
  5. java编译过程.java-->.class-->JVM
import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
public @interface RuntimeAnnotation {
}

@RuntimeAnnotation
public class C1 {
}

Class c1 = Class.forName("retentions.C1");
System.out.println(c1.getAnnotations());//可以通过反射获取
  1. @Target:限定目标注解作用于什么位置@Target({ElementType.METHOD,ElementType.FIELD})
  1. ElementType.ANNOTATION_TYPE(注:修饰注解)
  2. ElementType.CONSTRUCTOR
  3. ElementType.FIELD
  4. ElementType.LOCAL_VARIABLE
  5. ElementType.METHOD
  6. ElementType.PACKAGE
  7. ElementType.PARAMETER
  8. ElementType.TYPE(任何类型,即上面的的类型都可以修饰)
  1. @Inherited(继承注解)
  1. 让一个类和它的子类都包含某个注解,一个类的父类使用这个注解时,类的所有子类会有这个注解
  2. 普通的注解没有继承功能
  1. @Documented
  1. 指明这个注解可以被Javadoc工具解析,形成帮助文档

4. 自定义注解

注解使用@interface来声明,注解都是扩展至annotation接口,有参数的注解应该赋值

  1. 声明注解
    注解可以包括的类型:8种基本类型(int/short/long/float/double/byte/char/boolean),String,Class,enum,注解类型,由前面类型组成的数组
    成员变量可以使用多种类型,可以设置默认值,也可以不设置默认值
@Retention(RetentionPolicy.RUNTIME)
//表示该注解会保留在class文件中
@Target(ElementType.METHOD)   
//表示该注解只能用于方法
public @interface MultipleTest {
    int a() default 0;
    int b() default 0;
}
  1. 可以给JAVA注解赋初值
@MultipleTest(a=1,b=1)
public int test1(){}
@MultipleTest(b=1,a=1)
public int test2(){}