文章目录
注解的概念
1.注解是代码里的一种标记,这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理。我们可以在包,类,构造器,方法,成员变量,局部变量,方法参数上添加注解。代码分析工具、开发工具(如idea等)和部署工具可以通过这些补充信息进行验证或者进行部署。而注解本身并没有功能。
2.注解是JDK1.5的新特性
注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标 记,以后,javac编译器、开发工具和其他程序可以通过反射来了解你的类及各种 元素上有无何种 标记,看你的程序有什么标记,就去干相应的事,标记可以加在 包、类,属性、方法,方法的参数以及局部变量上。
在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。
框架 = 注解 + 反射 + 设计模式
注解的作用
1.生成帮助文档
生成文档相关的注解
@author
标明开发该类模块的作者,多个作者之间使用,分割
@version
标明该类模块的版本
@see
参考转向,也就是相关主题
@since
从哪个版本开始增加的
@param
对方法中某参数的说明,如果没有参数就不能写
@return
对方法返回值的说明,如果方法的返回值类型是void就不能写
@exception
对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写
2.在编译时进行格式检查
JDK内置的三个基本注解
@Override
: 限定重写父类方法, 该注解只能用于方法,告诉编译器该方法是重写父类中的方法,如果父 类不存在该方法,则编译失败。
@Deprecated
: 用于表示所修饰的元素(类, 方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择
@SuppressWarnings
: 抑制编译器警告
3.跟踪代码依赖性,实现替代配置文件功能
Servlet3.0提供了注解就不需要在web.xml文件中进行Servlet的部署了。
4.框架配置等
自定义注解
语法格式
public @interface 注解名{
}
这是一个最简单的注解,这样的注解并没有什么作用,我们可以让这个注解更为丰富,如限制注解的使用位置使用元注解,让注解的功能更加强大给注解添加属性。
以SuppressWarnings注解示例:
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) //元注解
@Retention(RetentionPolicy.SOURCE) //元注解
public @interface SuppressWarnings {
String[] value(); //注解的属性
}
元注解
概述::由JDK提供的,用来限制自定义注解的注解。
@Target:用于限制自定义注解可以用在什么地方。从ElementType里取值。常用值:
ElementType.TYPE
:可以用在类上ElementType.METHOD
:可以用在方法上ElementType.FIELD
:可以用在字段属性上ElementType.LOCAL_VARIABLE
:可以用在局部变量上
@Retention:用于限制自定义注解生命周期(保留到哪个阶段)。从RetiontionPolicy里取值,常用值:
RetentionPolicy.SOURCE
:自定义注解保留到源码阶段RetentionPolicy.CLASS
:自定义注解保留到字节码阶段RetentionPolicy.RUNTIME
:自定义注解保留到运行阶段
注解的属性
语法:
属性类型 属性名称()
属性类型 属性名称() default 默认值
注:并非所有数据类型都可以使用的,注解的属性只支持:
- 8种基本数据类型(int,float,boolean,byte,double,char,long,short)
- String、Class、枚举、注解
- 以及以上类型的一维数组
注解的使用
1.如果注解没有任何属性需要设置参数值的话,直接写@注解名
2.如果注解有属性需要设置参数值,就需要在使用注解时指定属性的值。如@注解名(属性名=值, 属性名=值,...)
3.如果注解只有一个属性需要赋值,并且属性名称是value,在使用注解时可以省略value=
不写 。如:@注解名("value的值")
解析注解
前面说了注解本身并没有功能,哪为什么注解可以帮我们做这么多事呢,那是因为在IDE或某个代码程序里,它们利用反射获取注解信息,解析注解,给注解添加了这些功能。