Java 注解

什么是注解?

注释: 用文字描述程序的, 给程序员看的.

注解 ( Annotation ): 说明程序的, 给计算机看的.

 

定义: 

  1. 注解, 也叫元数据, 一种代码级别的说明, 是 JDK 1.5 及以后版本的新特性.
  2. 与类, 接口, 枚举是在同一个层次, 它可以声明在包, 类, 字段, 方法, 局部变量的前边, 用来对这些元素进行说明.

 

作用分类: 

  1. 编写文档: 生成 doc 文档.
  2. 代码分析: 通过注解对代码进行分析. (使用反射)
  3. 编译检查: 让编译器能够实现基本的编译检查. (例如: Override)

 

JDK 内置注解

jdk 中预定义的一些注解: 

  1. @Override: 检测被注解标注的地方是否是继承父类 (接口) 的.
  2. @Deprecated: 该注解标注的内容, 表示已过时.
  3. @SuppressWarnings: 压制警告, 例如: @SuppressWarnings("all")

 

demo:

@SuppressWarnings("all")  // 压制警告
interface MyInterface{
    public void test();
}

public class Main implements MyInterface {
    public static void main(String[] args) {
        Main m = new Main();
        m.show1();   // 不推荐使用过时的方法, 但也可以调用
        m.show2();
    }

    @Override
    public void test() {

    }

    @Deprecated
    public void show1(){
        System.out.println("old");
    }

    public void show2(){
        System.out.println("new");
    }
}

 

元注解

用于描述注解的注解 (类似于 py 中装饰器的嵌套)

  1. @Target: 描述注解能够作用的位置.  ( TYPE: 可以作用于类, METHOD: 作用于方法, FIELD: 作用于成员变量 )
  2. @Retention: 描述注解被保留的阶段. ( 源码, 字节码[编译], runtime ), 一般使用 runtime
  3. @Documented: 描述注解是否被抽取到 api 文档中.
  4. @Inherited: 描述注解是否被子类继承.

 

自定义注解

格式: public @interface 注解名称{}

本质: 注解本质上就是一个接口, 该接口默认继承 Annotation 接口

  • public interface MyAnno extends java.lang.annotation.Annotation {}

 

属性:

  1. 接口中可以定义的抽象方法 (称作注解的属性)

    属性的返回值类型有下列取值

    • 基本数据类型

    • String

    • 枚举

    • 注解

    • 以上类型的数组

  2. 定义了属性, 在使用时需要给属性赋值

    • 如果定义属性时, 使用default关键字给属性默认初始化值, 则使用注解时, 可以不进行属性的赋值

    • 如果只有一个属性需要赋值, 并且属性的名称是value, 则value可以省略, 直接定义值即可

    • 数组赋值时, 值使用 {} 包裹, 如果数组中只有一个值, 则 {} 可省略

 

// TODO 缺少一个注解的例子 ... 

 

 

ending ~ 

 

 

posted @ 2019-11-12 15:38  kaichenkai  阅读(187)  评论(0编辑  收藏  举报