Java学习笔记:注解

59 阅读2分钟

一、概述

    总体来说,Java中的注解就是对一段程序的描述,通过注解,我们可以直观的了解到该段代码是用来做什么的。

    已@Override注解为例:
@Override
public String toString() {
    return super.toString();
}

    这样在编译时我们就能确定该方法是不是重写的父类中的方法,如果父类(或接口)中没有该方法,则会报错。

二、JDK内置注解

    JDK已提前帮我们定义了一些注解,以下是常用的一些注解:

  • @Override:检测该注解所标注的方法是否继承自父类(或接口);
  • @Deprecated:表示该注解所标注的内容已过时(即所标注内容不推荐使用);
  • @SuppressWarnings:抑制警告(需要传参数,一般使用“All”)
  • @param:注解描述的是一个参数(生成文档时使用);
  • @return:注解描述的是一个返回值(生成文档时使用)。

三、元注解

    即描述注解的注解,我们打开@Override的源文件,可以看到该注解是这样定义的:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

    我们可以看到注解的本质其实是一个接口,其中@Target和@Retention就属于元注解,他们用来描述Override注解的一些功能。

    下面我们来看看Java中常用的元注解:

    @Target:描述注解作用的位置,ElementType.METHOD表示作用于一个方法上;

    @Retention:描述注解被保留的阶段,RetentionPolicy.SOURCE表示注解会在生成字节码文件后才被销毁;

    @Documented:描述注解是否被抽取到API文档中;

    @Inherited:描述注解是否被子类继承。

四、自定义注解

    有以下三个步骤:

  • 定义一个注解:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String methodName();
    String className();
}
  • 创建一个注解解析程序:

    public class Demo { public static void main(String[] args) { Class rtClass = ReflectTest.class; MyAnnotation anno = rtClass.getAnnotation(MyAnnotation.class); String className = anno.className(); String methodName = anno.methodName(); System.out.println("className:" + className + "; methodName" + methodName); } }

  • 使用注解:

@MyAnnotation(methodName = "myMethod", className = "learnAnnotation.ReflectTest")
public class ReflectTest {
    public void myMethod() {
        System.out.println("----------");
    }
}