Java注解基础

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. 避免代码错误
  2. @Deprecated

    1. 修饰类/类的元素/包
    2. 标注为废除,建议程序员不再使用这个类/元素/包
  3. @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());//可以通过反射获取
    
  2. @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(任何类型,即上面的的类型都可以修饰)
  3. @Inherited(继承注解)

    1. 让一个类和它的子类都包含某个注解,一个类的父类使用这个注解时,类的所有子类会有这个注解
    2. 普通的注解没有继承功能
  4. @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;
    }
    
  2. 可以给JAVA注解赋初值

    @MultipleTest(a=1,b=1)
    public int test1(){}
    @MultipleTest(b=1,a=1)
    public int test2(){}
    
posted @ 2020-03-01 21:33  Ysalng  阅读(158)  评论(0编辑  收藏  举报