Java之注解


2019/2/1 Java基础

# 注解

  • 概念:说明程序的,给计算机看的
  • 作用分类:
    1. 编写文档:通过代码里标识的注解生成文档【生成doc文档】
    2. 代码分析:通过代码里标识的注解对代码进行分析【使用注解】
    3. 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】

# 基本内置注解

  • @Override :检测被该注解标注的方法是否是继承自父类(借口)的,如果不是,则报错

  • @Deprecated :表示这个方法已经过期,不建议开发者使用。(暗示在将来某个不确定的版本,就有可能会取消掉)

  • @SuppressWarnings:Suppress英文的意思是抑制的意思,这个注解的用处是忽略警告信息

    • 这个注解是有参数的,对应参数及作用如下:

      1.deprecation:使用了不赞成使用的类或方法时的警告(使用@Deprecated使得编译器产生的警告);

      2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型; 关闭编译器警告

      3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;

      4.path:在类路径、源文件路径等中有不存在的路径时的警告;

      5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;

      6.finally:任何 finally 子句不能正常完成时的警告;

      7.rawtypes 泛型类型未指明

      8.unused 引用定义了,但是没有被使用

      9.all:关于以上所有情况的警告。

    • 使用示范:

      @SuppressWarnings({ "rawtypes", "unused" })  //注意不要带分号
      
      1
  • @FunctionalInterface这是Java1.8 新增的注解,用于约定函数式接口。

    函数式接口概念: 如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口称为函数式接口。函数式接口其存在的意义,主要是配合Lambda 表达式 来使用。

# 自定义注解

  • 格式:

      元注解
      public @interface 注解名称{
          属性()
      }
    
    1
    2
    3
    4
  • 本质:注解本质上就是一个接口,该接口默认继承Annotation接口

    • public interface MyAnno extends java.lang.annotation.Annotation {}
  • 属性:接口中可以定义的成员方法

    • 要求:

      1. 属性的返回值类型有下列取值:(注意没有void!)

        • 基本数据类型
        • String
        • 枚举
        • 注解
        • 以上类型的数组
      2. 定义了属性,在使用时需要给属性赋值

        1. 如果定义属性时,可以用default关键字给属性默认初始化值;使用注解时,就可以不进行属性的赋值。
        2. 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
        3. 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略
  • 元注解:用于描述注解的注解

    • @Target:描述注解能够作用的位置
      • ElementType取值:
        • TYPE:可以作用于类上
        • METHOD:可以作用于方法上
        • FIELD:可以作用于成员变量上
    • @Retention:描述注解被保留的阶段
      • @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
    • @Documented:描述注解是否被抽取到api文档中
    • @Inherited:描述注解是否被子类继承

Initializing...

山楂树之恋
程佳佳