java1.5之后引入的特性,与类和接口同一层次
注解本质
* public interface 注解名 extends java.lang.annotation.Annotation {}
* 注解本质上是一个接口,默认继承Annotation接口
注解的作用
1. 格式检查:比如@Overload
2. 充当配置:运行时动态获取注解信息,实现配置文件的功能
3. 减少重复工作:比如第三方框架xUtils,通过注解@ViewInject减少对findViewById的调用,类似的还有(JUnit、ActiveAndroid等)>
还没接触到第三种
jdk中预定义的注解
* @Overrid : 检测方法是否继承自父类或者接口
* @Deprecated : 表示内容已经过时
* @SupressWarnings : 压制警告
* 一般传递参数all
自定义注解
* 格式:
元注解
public @interface 注解名称{}
* 属性:接口中的成员方法
* 要求:
1. 属性的返回值类型
- 基本数据类型
- String
- 枚举类型
- 注解
- 以上类型的数组
2. 使用注解时要给属性赋值
- 属性也就是抽象方法,可以用 default 设置默认值
* int 属性()default 初始值;
- 当属性名为value 时,并且只有一个属性时,使用注解可以省略value直接填写属性值
- 属性为数组时使用{}包裹数据,当数组只有一个数据时可以省略{}
* 元注解:描述注解的注解
* @Target:注解作用的位置
* 属性:enum ElementType
* TYPE —— 类
* FIEID —— 成员变量
* METHOD —— 方法
* PARAMETER —— 参数
* CONSTRUCTOR —— 构造器
* LOCAL_VARIABLE —— 局部变量
* ANNOTATION_TYPE —— 注解
* PACKAGE —— 包
---------java1.8之后-------------
* TYPE_PARAMETER —— 键入参数(?)
* TYPE_USE —— 使用类型
---------java 9之后-------------
* MODULE —— 模块
* @Retention:注解保留时间
* 属性:enum RetentionPolicy
* SOURCE —— 源文件时期,丢弃于编译时期
* CLASS —— 字节码文件,运行时不被JVM保留(这是默认行为)
* RUNTIME —— 运行时期,所以可以被反射读取
* @Document:被包含在Javadoc种
* 可以用javadoc 方法文档化,生成API
* @Inherited:子类可以继承父类的注释
类中获取注释的方法
Class<类名称> demo = (类名称.class);
自定义注解 anno = demo.getAnnotation(自定义注解.class);
anno.属性;