目录

随便聊一聊java的注解

java注解

Annotation

1、编译器注解

不会被编译到.class文件,在编译之后就被编译器扔掉了

@Override:让编译器检查该方法是否正确的实现了覆写

@SuppressWarnings:告诉编译器忽略此处代码产生的警告

2、处理.class文件使用的注解

会被编译进入到.class文件,但是加载结束之后并不会存在于内存中,这些注解只被一些底层库使用,一般不需要开发者来处理

3、程序运行期间可以读取的注解

加载后一直存在于JVM中。

定义一个注解的时候,一般包含一下参数

  • 所有基本类型

  • String

  • 枚举类型

  • 基本类型、String、class以及枚举的数组

二、定义注解

java使用@interface语法来定义注解Annotation

public @interface Report{
  int type() default 0;
  String level() default "info";
  String value() default "";
}

default就是设定默认值的作用

元注解

用A注解来修饰B注解,A就是元注解,java中定义毫克一些元注解,我们直接用就行了

例如:

@Target可以定义其他的注解可以被应用于源码的那些位置

  • 类或接口:ElementType.TYPE
  • 字段:ElementType.FIELD
  • 方法:ElementType.METHOD
  • 构造方法:ElementType.CONSTRUCTOR
  • 方法参数:ElementType.PARAMETER

@Retention定义生命周期

  • 仅编译期:RetentionPolicy.SOURCE;在编译之后被丢掉
  • 仅class文件:RetentionPolicy.CLASS;只保存到class文件中。并不会被加载进JVM
  • 运行期:RetentionPolicy.RUNTIME