Java基础 | 注解

Java基础 | 注解

概念

  1. 注解(Annotation)其实就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用 Annotation,程序员可以在不改变原逻辑的情况下,在源文件中嵌入一些补充信息
  2. 在 JavaSE 中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在 JavaEE/Android 中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替 JavaEE 旧版中所遗留的繁冗代码和XML配置等,框架其实就是 注解 + 反射机制 + 设计模式

Java 内置注解

  1. @Override: 限定重写父类方法, 该注解只能用于方法
  2. @Deprecated: 用于表示所修饰的元素(类, 方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择
  3. @SuppressWarnings: 抑制编译器警告

元注解 meta-annotion

元注解就是对现有的注解进行解释说明的注解

  1. Target: 用于指定被修饰的 Annotation 能用于修饰哪些程序元素(用于何处),可选参数有
    • ElementType.TYPE
    • ElementType.FIELD
    • ElementType.METHOD
    • ElementType.PARAMETER
    • ElementType.CONSTRUCTOR
    • ElementType.LOCAL_VARIABLE
    • ElementType.TYPE_PARAMETER
    • ElementType.TYPE_USE
  2. Retention:指定所修饰的 Annotation 的生命周期,一般指定为 RUNTIME,声明为 RUNTIME 生命周期的注解,才能通过反射获取
    • RetentionPolicy.RUNTIME
    • RetentionPolicy.CLASS
    • RetentionPolicy.SOURCE
  3. Documented:表示所修饰的注解在被 javadoc 解析时,保留下来
  4. Inherited:被它修饰的 Annotation 将具继承性

自定义注解

  1. 注解声明为 @interface
  2. 内部定义成员,格式为 类型 + 成员名();
  3. 如果只有一个成员,则可以用 value() 命名,在使用时可以省略 value = ,直接赋值
  4. 指定成员的默认值,使用 default 定义
  5. 如果自定义注解没成员,表明是一个标识作用
  • 注意
    • 如果注解有成员,在使用注解时,需要指明成员的值
    • 自定义注解必须配上注解的信息处理流程(使用反射)才意义
    • 自定义注解一般都会指明两个元注解:Retention、Target
import java.lang.annotation.*;

public class AnnotationTest {
    // 使用注解,参数全部默认
    @MyAnnotation
    void testMethod() {
    }

    // 使用注解,部分参数赋值,其他默认
    @MyAnnotation(name = "yzt",age = 24,id = 1)
    int testFiled;
}

// 几个元注解
@Inherited
@Documented
// 运行时保留
@Retention(RetentionPolicy.RUNTIME)
// 注解能用在何处
@Target({ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
@interface MyAnnotation {
    // 参数,注意 ()
    String name() default "yzt2020";
    int age() default 18;
    int id() default  -1;
    String[] school() default {"shu"};
}

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://yzt.cool/archives/2020-03-24-javaannotation