注解Annotation

注解Annotation

注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后的某个时刻非常方便地使用这些数据。

概念

  • Annotation在一定程度上是把元数据和源代码文件结合在一起,而不是保存在外部文档中这一大的趋势之下所催生的。从JDK5.0开始引入。

  • Annotation的作用:

    • 不是程序本身,可以对程序作出解释。(这一点和注释comment相同)

    • 可以被其他程序(比如编译器)读取

  • Annotation的格式:

    • 注解是以“@注解名”在代码中存在的,还可以添加一些参数值,例如:

      @SuppressWarnings(value = "unchecked")

  • Annotation的使用范围:

    • 可以附加在package,class,method,field等上,相当于给它们添加了额外的辅助信息,可以通过反射机制访问这些元数据

内置注解(定义在java.lang中的注解)

  • @Override,表示当前的方法定义将覆盖超类中的方法。

  • @Deprecated,如果程序员使用了注解为它的元素,那么编译器会发出警告信息

  • @SuppressWarnings,关闭不当的编译器警告信息。在Java SE5之前的版本中,也可以使用该注解,不过会被忽略不起作用

    • @SuppressWarnings("all")

    • @SuppressWarnings("unchecked")

    • @SuppressWarnings(value = {"unchecked", "deprecation"})

    • 等等

    • 此注解需要添加一个参数才能使用,这些参数都是已经定义好了的

元注解

Java目前只内置了三种标准注解,以及四种元注解。元注解专职负责注解其他的注解:


@Target                                       表示该注解可以用于什么地方。可能的ElementType参数包括:

                                                   CONSTRUCTOR:构造器

                                                   FIELD:域(包括enum实例)

                                                   LOCAL_VARIABLE:局部变量

                                                   METHOD:方法

                                                   PACKAGE:包

                                                   PARAMETER:参数

                                                   TYPE:类、接口(包括注解类型)或enum


@Retention                                  表示需要在什么级别保存该注解信息。可选的RententionPolicy参数包括:

                                                   SOURCE:注解将被编译器丢弃

                                                   CLASS:注解在class文件中可用,但会被JVM丢弃

                                                   RUNTIME:JVM将在运行期也保留注解,因此可以通过反射机制读取注解的信息


@Documented                              将此注解包含在Javadoc中


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


自定义注解

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。

例:

import java.lang.annotation.*

//元注解    
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
    //注解元素: 类型 + 元素名 + ();
    String value();
    String name() default "";
    int age() default 0;
}

说明:

  • 可以通过default来声明元素的默认值

  • 如果只有一个注解元素,一般元素名为value。这样做的好处是给value赋值时可以省略value =

  • 注解元素必须要有值,定义注解时,经常使用空字符串、0、-1作为默认值

目前只简单了解,更加深入(比如编写注解处理器)可以看Thinking in java第20章

上一篇:ArrayList底层原理学习


下一篇:阿里云服务器 centos 7 安装postgresql 11