一般常见的注解有:
@Override 检测该注解标注的方法是否是继承自父类(接口)的
@Deprecated 表示已过时
@SuppressWarninngs 压制警告,eg:@SuppressWarnings("all") 在类前面加,整个类的警告被压制
自定义注解:
格式:
本质:注解本质上就是一个接口,该接口默认继承Annotation接口
public interface MyAnno extends java.lang.annotation.Annotation{}
属性:接口中的抽象方法
要求:1.属性的返回值类型有下列取值
*基本数据类型
*String
*枚举
*注解
*以上类型的数组
eg:
2.定义了属性(方法),在使用时需要给属性赋值
(1) 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
(2) 如果只有一个属性需要赋值,并且属性的名字是value,则value可以省略,直接定义值即可。
(3) 数组赋值时,值使用{}包裹。如果数组中值只有一个,则{}可以省略。
eg:
元注解 :用于描述注解的注解
@Target:描述注解能够作用的位置
ElementType取值:TYPE:可以作用于类上;METHOD:可以作用于方法上;FIELD:可以作用于成员变量上。
@Retention:描述注解被保留的阶段
@Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class类字节码文件中,并被JVM读取到。(RetentionPolicy.SOURCE只在源码中,不会到字节码中,RetentionPolicy.CLASS会保留到class类字节码文件中,不会被JVM读取到,一般自定义注解用RUNTIME)
@Documented:描述注解是否被抽取到api文档中
@Inherited:描述注解是否被子类继承
eg:
在程序使用(解析)注解:获取注解中定义的属性值
1.获取注解定义的位置的对象(类Class、方法Method、变量Field)
2.获取指定的注解 *用getAnnotation()
3.调用注解中的抽象方法获取配置的属性值
eg:通过注解和反射获取执行ToastDemo类的showToast()方法
通过调用ReflectTest类中的runToastDemoMethod()就可以执行ToastDemo类的showToast()方法