注解

注解作用

对程序进行标注和解释

注解 说明
@Override 描述子类重写父类方法
@Deprecated 描述方法过时
@SuppressWarnings 压制警告

注解与注释的区别

  1. 注释是给程序员看
  2. 注解是给编译器看(让虚拟机看到程序中的注解,注解代表程序的一些特殊功能)

自定义注解

1
2
3
public @interface 注解名{
public 元素类型 元素名() default 默认值;
}
  • 元素前的public修饰是默认的可以省略,但是不能使用其他的修饰

  • default是用来设置默认值的,在使用的时候如果不指定元素的值则默认是设置的这个默认值

  • 元素类型可以使用如下

    基本数据类型

    String类型

    Class类型

    注解类型

    枚举类型

    以上类型的一维数组

元注解

元注解是修饰注解的注解,JDK提供了一些元注解使用

@Target:用于定义被修饰的注解可以应用于代码中的哪些位置

  1. 类或接口:ElementType.TYPE
  2. 成员变量:ElementType.FIELD
  3. 成员方法:ElementType.METHOD
  4. 构造方法:ElementType.CONSTRUCTOR
  5. 方法参数:ElementType.PARAMETER
1
2
@Target(ElementType.TYPE)
public @interface Demo{}// 说明Demo注解可以用在类前面

@Retention:用于定义注解的生命周期

  1. 仅编译期:RetentionPolicty.SOURCE
  2. 仅class文件:RetentionPolicty.CLASS
  3. 运行期:RetentionPolicty.RUNTIME
  4. 通常我们自定义的注解是在运行期使用的,所以自定义注解时会使用这个元注解修饰自定义注解,并设置为RetentionPolicty.RUNTIME

@Documented:指定该注解是否会在javadoc体现

@Inherited:子类会继承父类注解

注解的使用

格式

1
2
3
4
5
6
// 方式1,给指定的元素赋值,没有赋值的将使用默认值
@注解名(元素1 = 属性值,元素2 = 属性值)
// 方式2,给元素名为value的元素赋值,value是特殊的一个元素,如果自定义注解中不给出该元素而使用这种方式赋值会报错
@注解名(属性值)
// 方式3,全部元素使用默认值
@注解名

判断

判断某个注解是否存在于某个ClassFieldMethodConstructor

  • Class.isAnnotationPresent(Class)
  • Field.isAnnotationPresent(Class)
  • Method.isAnnotationPresent(Class)
  • Constructor.isAnnotationPresent(Class)
  • 注意:方法的参数是需要判断的注解的Class对象,返回值类型是boolean