什么是注解
- 从JDK5开始,Java增加对元数据的支持,也就是注解,
- 可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。
- 通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
- 注解是一种特殊的Java构造器,它可以用于装饰
类方法、字段、参数,变量、构造函数、包、或者注解
为什么使用注解
当我们希望在代码元素(类方法、字段、参数,变量、构造函数、包、或者注解)
上只要加上特定的标识,便能达到想有的功能时,就可以使用注解
例如:我们希望告诉编译器,这个类已经被废弃,尽量不要使用了,那么就可以在类上面加上系统定义的@Deprecated注解(如下图1),编译器编译时就会将该类加上标记中线(如图2),注解的作用不仅可以在编译期,运行时也是可以用的
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200607142046663.png
注解的类型
注解类型分为两种,第一种是
元注解
,第二种是普通注解
元注解: 可以在注解上加的注解,比如:指定普通注解
的作用范围、保留保留的级别是编译期/字节码期/运行期,下面是是系统定义的常用元注解
- @Target
表示该注解可以用于什么地方,可能的ElementType参数有 CONSTRUCTOR: 构造器的声明 FIELD: 域声明(包括enum实例) LOCAL_VARIABLE: 局部变量声明 METHOD: 方法声明 PACKAGE: 包声明 PARAMETER: 参数声明 TYPE: 类、接口(包括注解类型)或enum声明
- @Retention
表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括: SOURCE:注解将被编译器丢弃 CLASS:注解在class文件中可用,但会被VM丢弃 RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。
- @Document
将注解包含在Javadoc中
- @Inherited
允许子类继承父类中的注解
普通注解: 注解到代码元素(类方法、字段、参数,变量、构造函数、包、或者注解)
,使其达到特有的功能,自定义注解我们是可以创建使用的
- 系统的自定义注解
@Override //当前的方法定义将覆盖超类中的方法 @Deprecated //使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码 @SuppressWarnings //关闭不当编译器警告信息 ....
创建一个注解
- 创建一个@interface类
- 指定该注解只能哪些地方使用
- 指定该注解需要在什么级别保存该注解信息
- 设置注解参数(可选)
将注解修饰在代码元素上
- 查看注解可以用于什么地方
- 查看注解的参数
- 在元素上方加上注解
查找注解并特殊处理
我们在代码元素上增加注解后,代码在调用的时候,就可以查看元素上有没有这个注解,有的话就做特定的处理
涉及的重要类
- java.lang.annotation.Annotation
- java.lang.annotation.ElementType
- java.lang.annotation.RetentionPolicy
总结
以上就是注解的使用,我们通过合适的地方加上注解,在合适的地方找到注解并处理事务就是核心思想,butterknife我们都用过,其实自己实现一个也是很简单的,下篇将手写一个butterknife功能,来更深入的了解注解玩法