1.注解的定义:
注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。
它主要的作用有以下四方面:
①.生成文档,通过代码里标识的元数据生成javadoc文档。
②.编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。
③.编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。
④.运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。
2.注解分类:
1.Java内置注解
java自带的标准注解:
@Override:标明重写某个方法@Deprecated:标明某个类或方法过时、标明要忽略的警告
@SuppressWarnings:
用这些注解标明后编译器就会进行检查。
2.元注解:注解在注解上的注解
@Target:描述注解的使用范围
Target注解用来说明那些被它所注解的注解类可修饰的对象范围,取值范围定义在ElementType 枚举中。
public enum ElementType {
TYPE, // 类、接口、枚举类
FIELD, // 成员变量(包括:枚举常量)
METHOD, // 成员方法
PARAMETER, // 方法参数
CONSTRUCTOR, // 构造方法
LOCAL_VARIABLE, // 局部变量
ANNOTATION_TYPE, // 注解类
PACKAGE, // 可用于修饰:包
TYPE_PARAMETER, // 类型参数,JDK 1.8 新增
TYPE_USE // 使用类型的任何地方,JDK 1.8 新增
}
@Retention:描述注解保留的时间范围,定义在RetentionPolicy枚举中。
public enum RetentionPolicy {
SOURCE, // 源文件保留
CLASS, // 编译期保留,默认值
RUNTIME // 运行期保留,可通过反射去获取注解信息
}
注意点:
SOURCE:
标记的注解仅在源码中,编译器忽略;
使用场景:APT(注解处理器),在使用javac时,先会找注解处理程序然后再转化成.class文件。
CLASS
字节码级别,会存在字节码中,但是编译的时候也会忽略它
使用场景:
字节码增强技术;热修复
RUNTIME
存在运行时
使用场景:与反射结合一起使用
示例伪代码:
cls = activity.getClass();//获取反射对象
Field[] filed = cls.getdeclaredFiled();
for(...){
if(filed.isAnnotationPresent(注解名.class))
{
A a = declaredFiled.getAnnotation(注解名.class);//获取注解
}
}
int id = a.value();
filed.setAccessible(true);//设置可以设置值的权限



