Java:注解

注解

还记得刚开始学注解时,很天真。傻傻以为创建一个注解类,加到类、方法、属性上就能有某种功能。
现在对注解的理解很简单:标记,可以被程序读取到的标记!(注释是程序不会去执行的)

如果我们单单创建一个注解放到类或方法上面,此时并无啥用,只有编写类通过反射的手段去读取类或方法上的注解,再进行我们自己的业务逻辑代码实现。

自定义注解常识

  1. 定义注解是@interface,注意这不是接口,前面有@
  2. 注解类的属性定义是:类型 + 属性名。如 String value()
  3. 注解的属性类型只能是:String,Class,Enum,Annotation,上述4种类型的数组
  4. 在使用注解时,属性如果没有默认值,必须赋值

元注解

元注解是用来修饰我们自定义的注解。有4个内置的元注解,分别是:

  1. @Target
  2. @Retention
  3. @Documented(略)
  4. @Inherited

给个示例:

@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log

@Target

@Target是用来指定自定义注解可以使用在哪些目标上。这些目标挺多,不过最常用的只有下面这些:

  1. ElementType.FIELD: 字段上
  2. ElementType.METHOD: 方法上
  3. ElementType.Type: 类上
  4. ElementType.PARAMETER:形参上

@Retention

@Retention是用来定义自定义注解的生命周期。有3个生命周期,分别是:

  1. RetentionPolicy.SOURCE:在源文件有效(注解在源文件时存在)
  2. RetentionPolicy.CLASS:在编译时及编译成class文件有效(注解在编译时存在)
  3. RetentionPolicy.RUNTIME:在运行时有效(注解在运行时存在,即在内存中会保留下来),这个是重点,我们能看见的大多是注解生命周期都是定义这个

@Inherited

@Inherited实际也用得很少。但稍微说一下,被他修饰的注解具有继承性。
举个例子:@Inherited修饰了注解A,注解B就能去继承注解A,不是这个意思。而是注解A用在了Person类上,Student继承了Person,那Student也能继承下来注解A

posted @ 2023-01-28 11:17  爱编程DE文兄  阅读(18)  评论(0编辑  收藏  举报