Java注解

Java 注解分类

按照运行机制分类:源码注解、编译时注解、运行时注解。

源码注解:只在源码中存在,编译成.class 文件就不存在了。

编译时注解:源码和.class 文件都存在。

运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解。

----------------------------------------------------------------------------------

按照来源分:来自 JDK 的注解、第三方的注解、自定义的注解。

元注解:注解的注解。

    1.@Target,
    2.@Retention
    3.@Documented
    4.@Inherited

----------------------------------------------------------------------------------

@Target

  @Target 说明了 Annotation 所修饰的对象范围

  取值 (ElementType) 有:

    1.CONSTRUCTOR: 用于描述构造器
    2.FIELD: 用于描述域
    3.LOCAL_VARIABLE: 用于描述局部变量
    4.METHOD: 用于描述方法
    5.PACKAGE: 用于描述包
    6.PARAMETER: 用于描述参数
    7.TYPE: 用于描述类、接口 (包括注解类型) 或 enum 声明

@Retention

  @Retention定义了该 Annotation 被保留的时间长短

  作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)

  取值(RetentionPoicy)有:

    1.SOURCE: 在源文件中有效(即源文件保留)
    2.CLASS: 在 class 文件中有效(即 class 保留)
    3.RUNTIME: 在运行时有效(即运行时保留)

@Documented:

  @Documented 用于描述其它类型的 annotation 应该被作为被标注的程序成员的公共 API,因此可以被例如 javadoc 此类的工具文档化。

  Documented 是一个标记注解,没有成员。

@Inherited

  @Inherited 元注解是一个标记注解,@Inherited 阐述了某个被标注的类型是被继承的。

----------------------------------------------------------------------------------

自定义注解的语法要求

1) 使用 @interface 关键字定义注解

2) 成员以无参无异常方式声明

3)可以使用 default 为成员指定一个默认值

4)成员类型是受限制的:

    1. 所有基本数据类型(int,float,boolean,byte,double,char,long,short)
    2.String 类型
    3.Class 类型
    4.enum 类型
    5.Annotation 类型
    6. 以上所有类型的数组

 

5)如果注解只有一个成员,那么这个成员的名字必须是 value(), 在使用时可以忽略成员名和赋值号(=)

6)注解可以没有成员,称为标示注解

----------------------------------------------------------------------------------

使用自定义注解

语法:@< 注解名 >(< 成员名 1>=< 成员值 1>,< 成员名 2>=< 成员值 2>,,...)

 

ps: 如果只有一个成员(value),则直接赋值,不需要写成< 成员名 1>=< 成员值 1>这种形式。