Java注解到底有什么用?

注解简介

注解可以加在类上边,成员变量上,方法上,方法参数上.

注解是用来完成功能的,每一个注解都可以完成一些功能.

常用注解

@Override 检查方法是否是重写父类的方法

@FunctionalInterface 检查接口是否是函数式接口

@Deprecated 标注方法已经过时,不推荐使用

自定义注解

注意啊,interface前边有个@,这是自定义注解,不是接口。

public @interface Student{
    
    
​	String name();    //属性没有默认值,使用时必须指定值。int age() default 0 ;  //有默认值,使用时,可以不给,也可以给。
​	String[] hobbies();  //数组格式,按照数组格式赋值,只有一个时,可以省略大括号。
}

//这样使用。
@Student(name="小老犇",hobbies={
    
    "放牛","吃草"})
public void abc(){
    
    sout("注解使用")}

注解中属性的数据类型一共有三种:

  • 八种基本数据类型(byte short int long float double boolean char)

  • Class, String, 枚举, 注解

  • 以上所有类型的类型数组。

元注解

元注解也是注解

元注解用来修饰注解的注解

元注解要加在注解上面 作用是对注解进行限制

@Target

限制注解的使用位置 。
在这里插入图片描述
@Target原理

@Target中只有一个属性叫做value.这个属性是ElementType[]

ElementType是一个枚举,枚举是一个特殊的类,枚举中每一个属性都是自身类型,枚举中的属性可以通过枚举名直接调用。
在这里插入图片描述

@Retention

限制注解的生命周期。

@Retention原理

@Retention只有一个属性叫做value,这个属性是RetentionPolicy类型,同样是枚举类型。
在这里插入图片描述
在这里插入图片描述
找一个经常使用的注解点进去,看看。
在这里插入图片描述

解析注解

解析注解,基于反射。解析注解时,需要使用Class对象和Method对象和Field对象,使用这些对象获取注解

而这些对象需要使用反射获取。

获取注解中的内容(比如属性),并进行处理.

Annotation接口 所有的注解默认实现该接口

AnnotatedElement 接口,里面定义了很多方法操作注解

相关API

getAnnotations() 获取所有注解

getAnnotation(Class annotationClass) 获取指定注解 传递哪个注解的Class,获取的就是谁的注解

boolean isAnnotationPresent(Class annotationClass) 判断指定注解是否存在,参数是注解的Class.

以上API的由谁来调用,要看这个注解注解的是类还是方法还是成员变量:

是类就用实例类的Class对象调用.获取该实体类上边的注解。

是方法就用Method对象调用。

是成员变量就用Field对象调用.。

猜你喜欢

转载自blog.csdn.net/numbbe/article/details/109280606
今日推荐