注解 Annotation

223 阅读2分钟

注解

  1. Annotation:
  1. 不是程序本身,可以对程序作出解释
  2. 可以被其他程序(比如编译器等)读取 像之前我们的重写toString()方法,toString()方法上面的 @Override就是一个注解
    @Override //重写方法的重写
    public String toString() {
        return  "@Override是一个注解";
    }
  1. Annotation的格式:

注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")。

  1. Annotation的使用范围:

可以在package,class,method,field等上面,相当于给它们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。

内置注解

  1. 种类:
  1. @Override:定义在java.lang.Override中,此注解只适用于修辞方法,表示一个方法的声明打算重写超类中的另一个方法声明。
  2. @Deprecated:java.lang.Deprecated中,此注解适用于修辞方法、属性、类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择。
  3. @SuppressWarnings:java.lang.SuppressWarnings中,用来抑制编译时的警告信息。 与前两个注解不同,这个注解需要添加一个参数
  1. 简单的代码演示:

元注解

  1. 元注解的作用:负责注解其他注解,Java定义了4个标准的meta-annotation类型,它们提供了对其他annotation类型做出说明
  2. 4个标准meta-annotation类型:
  • @Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
  • @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)
  • @Document:说明该注解将被包含在javadoc中
  • @Inherited:说明子类可以继承父类中的该注解

自定义注解

package AnnotationStudy;

import java.lang.annotation.*;
//自定义注解
public class demo03 {
    //注解可以显示赋值,如果没有默认值,我们就必须给注解赋值
    @MyAnnotation(age = 18)
    public void test1() {
    }
}


@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
    //注解的参数:参数类型 + 参数名();
    //String name();
    String name() default "";//设置了默认值

    int age();
    //int age() default 0;

    //int id();
    int id() default -1;//如果默认值为-1,代表不存在

}

**注意:**正常的自定义注解,没有那么多变量,正常只有一个,而且以 value作为参数名称( 好处:以value作为参数的话,@MyAnnotation(age = 18)中的 age= 就可以省略,直接写18)