抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Java注解Anotation

1. 什么是注解

注解是jdk5.0开始引进的新技术

1.1作用是什么

  1. 注解的作用类似注释,但注释是给人(程序员)看的,而注解是给编译器看的。

  2. 注解通过标记包、类、字段、方法、局部变量、方法参数等元素据,告诉jvm这些元素据的信息

1.2 格式

@注解名 的格式存在,如:

1
2
3
@override

@suppressWarnings(value="unchecked")

2. 元注解

元注解即用来定义注解的注解,也就是在你创建注解的时候会用到,Java有4个类型的元注解:

1
2
3
4
@Target
@Retention
@Documented
@Inherited
  1. @Target 表示该注解用于什么地方,可以是包、类、方法…,在枚举类 ElemenetType中 有说明:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Formal parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE,

    /**
    * Type parameter declaration
    *
    * @since 1.8
    */
    TYPE_PARAMETER,

    /**
    * Use of a type
    *
    * @since 1.8
    */
    TYPE_USE
    }

    例如创建一个test1注解:

    1
    2
    3
    4
    @Target({ElementType.METHOD, ElementType.TYPE})     //可以用在方法、class中
    @interface Test1{
    String value() default ""; //参数,默认为空
    }
  2. @Retention 表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中,包括:

    1
    2
    3
    RetentionPolicy.SOURCE        //注解将被编译器丢弃 
    RetentionPolicy.CLASS //注解在class文件中可用,但会被VM丢弃
    RetentionPolicy.RUNTIME //JVM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。通常自定义注解都用这个
  3. @Documented 将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。

  4. @Inherited 允许子类继承父类中的注解。

3. 自定义注解

一般使用元注解

  • @Target,指明在哪里使用
  • @Retention, 指明在什么时候起作用

例如:

1
2
3
4
5
6
7
8
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public@interface User{

//下面是注解的参数,定义格式:“类型 参数名();” , 默认值看自己要不要写
String name() default ""; //默认值为空
int id() default -1; //默认值-1,代表不存在
}

评论